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, и "является регистром по умолчанию для янки.