Vim, 22 , 18 нажатий клавиш
O <esc>J:h r<cr>lyEZZ<C-v>{@"
Огромная благодарность @Udioica за то, что она предложила мне потрясающий vim-ответ, который я расширил. Этот ответ не содержит звездочек в надежде выиграть награду.
Объяснение:
Ввод набирается до остальной части программы. Udioica придумала этот удивительный трюк. Печатание <n>O <esc>
создаст пирамиду пробелов и одну пустую строку, если вы :set autoindent
включили. Эта опция включается по умолчанию в vim 8 и neovim, но не в более старых версиях vim. Так как это также создает дополнительную строку, мы используем, J
чтобы соединить эту строку со следующей, что фактически просто удаляет строку ниже нас.
Теперь на этом этапе нам нужно заменить все эти пробелы звездочками. Если бы я не беспокоился об использовании звездочек в своем коде, я бы просто визуально выбрал все это <C-v>{
и тип r*
, который заменяет каждый символ выделения звездочкой. Но я не могу этого сделать.
Поэтому мы открываем страницы справки для :h r
. Интересно, что в окне vim эта страница отображается как:
r
r{char} Replace the character under the cursor with {char}.
...
С курсором на первом 'r'. Однако сам файл фактически содержит этот текст:
*r*
r{char} Replace the character under the cursor with {char}.
...
Довольно удобно. Таким образом, мы перемещаемся по одному символу с помощью l
кнопки и дергаем текст r*
с помощью yE
([y] ank к [E] nd этого слова).
Чтобы закрыть этот буфер, мы используем ярлык для сохранения файла ZZ
. Теперь мы визуально выбираем наши пробелы и запускаем вытянутый текст, как будто мы его набрали, выполнив @"
. Это работает, потому что "@" запускает следующий регистр как vim-keystrokes, и "является регистром по умолчанию для янки.