2011-01-22 1 views
4

Я знаю, что искать целое слово в Vim вам нужно ввести:Vim весь поиск слова - но быстрее

/\<word\><CR> 

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

?word<CR> 

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

Обновление: (insead of? I use \ now).

ответ

11

Я предпочитаю использовать * и # (как это было предложено Brian Agnew), но если вы хотите метод, который включает в себя набрав

?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, чтобы найти следующий экземпляр содержимого регистра поиска.

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

+0

Вот и все, спасибо. –

8

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

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

+0

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

4

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

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

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