Как указать "слово под курсором" в командной строке 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>