Я хочу написать команду, которая определяет «слово под курсором» в VIM. Например, допустим, у меня есть курсор на слове, и я заставляю его появляться дважды. Например, если слово «abc» и я хочу «abcabc», я могу ввести:
:s/\(abc\)/\1\1/
Но тогда я хотел бы иметь возможность переместить курсор на «def» и использовать ту же команду, чтобы изменить его на «defdef»:
:s/\(def\)/\1\1/
Как я могу написать команду в командной строке, чтобы она выполняла это?
:s/\(*whatever is under the commandline*\)/\1\1
источник
yiw
закончитьbyw
только из-за мышечной памяти. В сценарии, когда ваш курсор уже оказывается на первом символе в слове, вы должны опуститьb
и просто ввестиyw
vs, вы можете опуститьi
inyiw
. Могут произойти несчастные случаи, и исправление ошибки, безусловно,В режиме командной строки CTRL+ R CTRL+ Wвставит слово под курсором.
c_CTRL-R
Список всех других специальных регистров см. В справке :источник
yiw
: Янкировать внутреннее слово (слово под курсором). Эта команда также перемещает курсор в начало слова.P
: Вставить перед курсором.Затем вы можете сопоставить eg:
< ALT > - D
этой команде:источник
Другой простой способ сделать это - использовать
*
команду.В обычном режиме над словом введите
*
делает шаблон поиска текущим словом (например, \ <abc \>).:s//
выполняет подстановку с использованием текущего шаблона поиска, а\0
в разделе замены находится соответствующая строка.Затем вы можете повторить это поведение, произнеся над словом «def», набрав то же самое еще раз или набрав
@:
просто повторяет последнюю команду ex без необходимости ввода <Enter>, в данном случае подстановки.Вы также можете записать быстрый макрос, чтобы сделать это, используя
q
командуЗатем повторите это сколько угодно, набрав
когда над словом вы хотите удвоить. Поскольку это всего лишь на один символ меньше, чем в предыдущем решении, это может не стоить вам - если вы не будете выполнять другие бывшие команды между удвоением слов, что изменило бы поведение
@:
источник
Вам нужно избежать обратной косой черты в отображении. Вы также можете включить строку подстановки в сопоставление.
источник
сделаю то, что вы описываете.
также переместит курсор к следующему слову.
источник
@ user11211 предлагает самый простой способ скопировать слово под курсором:
скопировать внутреннее слово (перемещает курсор в начало слова), вставить (перед курсором).
например. прямо [т] вперед ----> прямолинейно [d] прямолинейно
[] - курсор
Чтобы уточнить ...
Вероятно, вы хотите, чтобы курсор следовал за вашим повторяющимся словом:
прямо [t] вперёд ----> прямопрямо []
НОТА:
внутреннее слово yank (без пробелов)
копирует все слова (включая конечные пробелы).
следовательно, это повторяющееся слово, включая пробел и курсор позиции.
прямо [т] вперед ----> просто прямолинейно []
источник
источник
n
флаг:substitute
команды, чтобы распечатать, сколько раз слово под курсором появляется в текущем буфере. Довольно умно, но не совсем ответ на этот вопрос.