Vim, 22 , 18 klawiszy
O <esc>J:h r<cr>lyEZZ<C-v>{@"
Ogromne uznanie dla @Udioica za wymyślenie niesamowitej odpowiedzi vim, którą rozwinąłem. Ta odpowiedź nie zawiera gwiazdek, w nadziei na wygranie nagrody.
Wyjaśnienie:
Dane wejściowe są wpisywane przed pozostałą częścią programu. Udioica wymyślił tę niesamowitą sztuczkę. Pisanie <n>O <esc>spowoduje utworzenie piramidy spacji i jednej pustej linii, o ile :set autoindentwłączysz. Ta opcja jest domyślnie włączona w vimie 8 i neovimie, choć nie w starszych wersjach vima. Ponieważ tworzy to również dodatkową linię, używamy Jdo łączenia tej linii z następną, co skutecznie usuwa linię poniżej nas.
W tym momencie musimy zastąpić wszystkie te spacje gwiazdkami. Gdybym nie martwił się użyciem gwiazdek w kodzie, wybrałbym tylko wizualnie całą rzecz <C-v>{i typ r*, który zastępuje każdy znak zaznaczenia gwiazdką. Ale nie mogę tego zrobić.
Dlatego otwieramy strony pomocy na :h r. Interesującą rzeczą jest to, że w oknie vima ta strona jest wyświetlana jako:
r
r{char} Replace the character under the cursor with {char}.
...
Z kursorem na pierwszym „r”. Jednak sam plik faktycznie zawiera ten tekst:
*r*
r{char} Replace the character under the cursor with {char}.
...
Całkiem wygodne. Poruszamy się więc nad jednym znakiem li szarpamy tekst za r*pomocą yE([y] ank do [E] tego słowa).
Aby zamknąć ten bufor, używamy skrótu do zapisania pliku ZZ. Teraz wybieramy wizualnie nasze spacje i uruchamiamy szarpany tekst tak, jakbyśmy to zrobili @". Działa to, ponieważ „@” uruchamia następujący rejestr jako naciśnięcia klawiszy vim, a „jest domyślnym rejestrem dla szarpania.