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


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

:s/(abc)//

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

:s/(def)//

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

:s/(*whatever is under the commandline*)/
8 69

8 ответов:

<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>\)/

находясь в режиме командной строки,CTRL+RCTRL+ W вставить слово под курсором.

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

:help c_CTRL-R
yiwP

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

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

затем вы можете отобразить, например:< ALT > - D этого команды:

:nmap < ALT >-D yiwP

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

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

*:s//<Enter>

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

:s// делает замену с использованием текущего шаблона поиска, и в Замена раздел соответствующей строке.

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

*@:

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

вы также можете записать быстрый макрос, чтобы сделать это с помощью q команда

qd*:s//<Enter>q

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

@d

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

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

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

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

ywPxw

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

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

yiwP

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

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

[] is cursor

подробнее...

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

yiwPea

прямой [t]вперед ----> straightforwardstraightforward[]

Примечание:

yiw

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

yaw

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

yawPea

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

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

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