Vim поиск по всему слову - но быстрее - PullRequest
4 голосов
/ 22 января 2011

Я знаю, что для поиска всего слова в vim вам нужно набрать:

/\<word\><CR>

Теперь, что я хотел бы сделать, чтобы сопоставить это поведение? (поскольку я никогда не ищу в обратном направлении, и при необходимости я могу искать вперед, а затем NN). То есть Я хотел бы напечатать:

?word<CR>

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

Обновление: (вместо? Я использую \ сейчас).

Ответы [ 3 ]

11 голосов
/ 22 января 2011

Я склонен использовать * и # (как предложено Брайаном Агнью), но если вам нужен метод, который предполагает ввод

?word<CR>

Вы могли бы сделать что-то вроде этого:

function! SearchWord(word)
    let @/ = '\<' . a:word . '\>'
    normal n
endfunction
command! -nargs=1 SearchWord call SearchWord(<f-args>)
nmap ? :SearchWord 

Обратите внимание, что после SearchWord в последней строке есть пробел.

Пояснение:

При сопоставлении ? откроется командная строка и введите SearchWord (включая пробел). Команда заставляет SearchWord myword сделать эквивалент call SearchWord('myword') (т.е. она помещает кавычки вокруг аргумента, чтобы превратить его в строку). Функция устанавливает регистр поиска @/ равным вашему слову, окруженному \< и \>, а затем выполняет обычный режим n, чтобы найти следующий экземпляр содержимого регистра поиска.

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

8 голосов
/ 22 января 2011

Вы можете искать слова под курсором, используя * и # (вперед и назад).g* и g# сделают то же самое, но найдут слова , содержащие то, что находится под вашим курсором изначально.

Очевидно (!), Вам уже нужно найти первый экземпляр, чтобы это работало, но это очень эффективно для последовательных поисков.

4 голосов
/ 14 февраля 2011

Решение Ала очень хорошо, но не проще ли просто ввести шаблон \<\>, а затем дважды переместить курсор назад? Это работает для меня:

nmap ? /\<\><Left><Left>

Таким образом, вы все равно получаете пошаговый поиск ( своего рода ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...