Как указать "слово под курсором" в командной строке VIM?
Я хочу написать команду, которая указывает "слово под курсором" в Vim. Например, предположим, что у меня есть курсор на слове, и я заставляю его появляться дважды. Например, если слово "abc", и я хочу" abcabc", то я мог бы ввести:
:s/(abc)//
но тогда я хотел бы иметь возможность переместить курсор в "def" и использовать ту же команду, чтобы изменить его на "defdef":
:s/(def)//
как я могу написать команду в командной строке, чтобы она сделала это?
:s/(*whatever is under the commandline*)/
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>
@user11211самый простой способ чтобы продублировать слово под курсором:
yiwP
дернуть внутреннее слово (перемещает курсор в начало слова), вставить (перед курсором).
например. прямой [t]вперед - - - - > straightforwar[d] прямо
[] is cursor
подробнее...
вы, вероятно, хотите, чтобы курсор следовал за вашим дублированным словом:
yiwPea
прямой [t]вперед ----> straightforwardstraightforward[]
Примечание:
yiw
это yank внутреннее слово (без пробелов)
yaw
выдергивать все слова (включая пробелы).
yawPea
поэтому дублировать слово, включая пробелы, и положение курсора.
прямой [t]вперед - - - - > прямой прямой[]