Как получить в данный момент искомый текст в vim? - PullRequest
4 голосов
/ 29 апреля 2010

Например, у меня есть некоторый код, и я использую «*», чтобы найти что-то в этом коде. Не найдя того, что я хочу в этом файле, я хотел бы использовать что-то вроде ack или grep для поиска в локальном каталоге. Я знаю, что могу сделать :! ack whatever, чтобы выполнить поиск из vim, но я хотел бы знать, есть ли способ заменить whatever на искомое слово в vim.

Ответы [ 4 ]

4 голосов
/ 29 апреля 2010

Вы можете использовать Ctrl-r, а затем /, чтобы вставить регистр последнего поиска.

:!grep <Ctrl-r> / file_list

Смотрите эту Vim Tips Wiki запись для получения дополнительной информации.

Обновление:
Команда поиска * всегда включает границы слов.

Однако команда поиска g* ведет себя так же, как *, но без границ слов.

Это можно использовать, чтобы обойти вашу проблему, а не использовать пользовательский макрос в ответе rampion .

1 голос
/ 29 апреля 2010

Отказ от Ответ Тима Хенигана , поместите это в свой .vimrc

cmap <C-R>/ <C-R>=substitute(substitute(@/, '^\\<', '', ''), '\\>$', '', '')

Теперь, когда вы нажмете CTRL-R / в режиме командной строки, он пропустит маркеры границы слова, поэтому вы сможете использовать

:!grep <b><i>CTRL-R /</b></i> file-list
1 голос
/ 29 апреля 2010

Я не нашел способа (легко) передать содержимое регистра поиска во внешнюю программу, не прибегая к сопоставлениям клавиш и оценочным значениям.

Однако вы можете использовать <cword> для передачи слова, находящегося под курсором, во внешнюю программу:

:!echo <cword>

или

:!ack <cword>
0 голосов
/ 29 апреля 2010

Вы можете вставить слово в регистр и использовать @regnum в строке командного режима

"1yw:! Grep @ 1

...