Как указать "слово под курсором" в командной строке VIM?

Я хочу написать команду, которая указывает "слово под курсором" в VIM. Например, допустим, что у меня есть указатель на слово, и я делаю его дважды. Например, если слово "abc", и я хочу "abcabc", тогда я могу ввести:

:s/\(abc\)/\1\1/

Но тогда я хотел бы переместить курсор на "def" и использовать ту же команду, чтобы изменить его на "defdef":

:s/\(def\)/\1\1/

Как я могу написать команду в командной строке, чтобы она это сделала?

:s/\(*whatever is under the commandline*\)/\1\1

Ответ 1

<cword> - это слово под курсором (: help <cword>).

Извините, я должен был быть более полным в этом ответе.

Вы можете применить команду nmap к ней, или эта серия нажатий клавиш для ленивого будет работать:

b #go to beginning of current word
yw #yank to register

Затем, когда вы вводите свой шаблон, вы можете нажать <control-r>0<enter>, который вставляет в вашу команду содержимое 0-го регистра.

Вы также можете сделать команду для этого, например:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

Что будет отображать удары '\' и 'w' в то же время, чтобы заменить вашу командную строку на

:s/\(<currentword>\)/

Ответ 2

В режиме командной строки CTRL + R CTRL + W будет вставлять слово под курсором.

См. справку для c_CTRL-R для списка всех других специальных регистров:

:help c_CTRL-R

Ответ 3

yiwP

yiw: Янь внутреннее слово (слово под курсором). Эта команда также перемещает курсор в начало слова.

P: Вставить перед курсором.

Затем вы можете сопоставить, например: < ALT > - D, с этой командой:

:nmap < ALT >-D yiwP

Ответ 4

Еще один простой способ сделать это - использовать команду *.

В обычном режиме, когда над словом, введите

*:s//\0\0<Enter>

* делает шаблон поиска текущим словом (например,\< abc \ > ).

:s// выполняет подстановку с использованием текущего шаблона поиска и \0 в замене section - строка, соответствующая строке.

Затем вы можете повторить это поведение, произнесите слово "def", либо набрав то же самое, либо, набрав

*@:

@: просто повторяет последнюю команду ex, без необходимости в <Enter> , в этом случае замену.

Вы также можете записать быстрый макрос, чтобы сделать это, используя команду q

qd*:s//\0\0<Enter>q

Затем повторите его в своем сердце, набрав

@d

когда над словом вы хотите удвоить. Поскольку это всего на один символ меньше, чем предыдущее решение, оно может не стоить того, что вам нужно - если вы не будете выполнять другие команды ex-команд между удвоением слов, что изменило бы поведение @:

Ответ 5

Вам нужно избежать обратных косых черт в пределах отображения. Вы также можете включить строку подстановки в отображение.

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>

Ответ 6

ywPx

будет делать то, что вы описываете.

ywPxw

также переместит курсор на следующее слово.

Ответ 7

@user11211 имеет самый простой способ, чтобы дублировать слово под курсором:

yiwP

задержит внутреннее слово (перемещает курсор в начало слова), вставляет (перед курсором).

например. straigh [t] forward ---- > straightforwar [d] прямолинейный

[] - это курсор

Разработать...

Вероятно, вы хотите, чтобы курсор соответствовал вашему дублируемому слову:

yiwPea

straigh [t] вперед ---- > straightforwardstraightforward []

Примечание:

yiw

- внутреннее слово yank (без пробелов)

yaw

- держит все слова (включая конечные пробелы).

yawPea

- это, таким образом, дублирующее слово, включая пробелы, и курсор позиции.

straigh [t] вперед ---- > прямолинейный []

Ответ 8

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>