Как указать «слово под курсором» в командной строке VIM? - PullRequest
76 голосов
/ 07 сентября 2008

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

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

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

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

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

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

Ответы [ 8 ]

113 голосов
/ 10 марта 2009

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

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

:help c_CTRL-R
61 голосов
/ 07 сентября 2008

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

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

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

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>\)/
24 голосов
/ 17 сентября 2008
yiwP

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

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

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

:nmap < ALT >-D yiwP
12 голосов
/ 17 сентября 2008

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

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

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

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

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

Затем вы можете повторить это поведение, скажем, над словом «def», либо введя то же самое снова, либо набрав

*@:

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

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

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

Затем повторите то, что вам нравится, набрав

@d

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

1 голос
/ 17 сентября 2008
ywPx

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

ywPxw

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

1 голос
/ 17 сентября 2008

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

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
0 голосов
/ 09 декабря 2014

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

yiwP

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

например. прямо [t] вперед ----> прямо вперед [d] прямо

[] - курсор

Для уточнения ...

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

yiwPea

прямо [т] вперед ----> прямо вперед прямо []

Примечание:

yiw

является внутренним словом yank (без пробелов)

yaw

- восстановить все слова (включая завершающие пробелы).

yawPea
Следовательно,

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

прямо [т] вперед ----> прямо прямо []

0 голосов
/ 15 мая 2009
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...