Выделить все вхождения выбранного слова?

Как я могу выделить все вхождение выбранного слова в GVim, как в Notepad++?

14 ответов


в нормальном режиме:

:set hlsearch

затем найдите шаблон с помощью команды / в обычном режиме или <Ctrl>o следовал по / в режиме вставки. * в обычном режиме будет искать следующее вхождение слова под курсором. The hlsearch опция выделит все из них, если установлено. # будет искать предыдущее вхождение слова.

чтобы удалить изюминку предыдущего поиска:

:nohlsearch

возможно, вы захотите отобразить :nohlsearch<CR> к некоторому удобному ключу.


на * клавиша выделит все вхождения слова, которое находится под курсором.


Я знаю, что это действительно старый вопрос, но если кто-то заинтересован в этой функции, может проверить этот код http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle

" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
   let @/ = ''
   if exists('#auto_highlight')
     au! auto_highlight
     augroup! auto_highlight
     setl updatetime=4000
     echo 'Highlight current word: off'
     return 0
  else
    augroup auto_highlight
    au!
    au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
    augroup end
    setl updatetime=500
    echo 'Highlight current word: ON'
  return 1
 endif
endfunction

самый простой способ, набрать в обычном режиме *

у меня тоже есть эти сопоставления для включения и отключения

"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv

выберите слово, нажав на него

set mouse=a     "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>

Бонус: CountWordFunction

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        let l:old_query = getreg('/')
        let var = expand("<cword>")
        exec "%s/" . var . "//gn"
    finally
        call winrestview(l:win_view)
        call setreg('/', l:old_query)
    endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>

выбор слова с помощью мыши и подсчет вхождений сразу: OBS: обратите внимание, что в этой версии у нас есть команда "CountWord" в конце

nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>

поиск решения (*, /...) переместить курсор, который может быть неудачным.

альтернативой является использование расширенная Марка.ВИМ плагин, а затем завершить свой .vimrc чтобы дважды щелкнуть подсветку триггера (я не знаю, как выбор клавиатуры может вызвать команду):

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   

оно позволяет множественным выделениям, настойчивости, etc.

чтобы удалить выделение, либо:

  • двойная нажмите еще раз
  • :Mark (выключить до следующего выбора)
  • :MarkClear

сначала (или в вашем .vimrc):

:set hlsearch

затем поместите курсор на слово, которое вы хотите выделить, и нажмите *.

hlsearch означает выделение всех вхождений текущего поиска и * означает поиск слова под курсором.


включить подсветку поиска:

:set hlsearch

затем найдите слово:

/word<Enter>

set hlsearch

может быть ?


сначала убедитесь, что hlsearch включен, выполнив следующую команду

:set hlsearch

вы также можете добавить это к своему .файл vimrc как set

set hlsearch

теперь, когда вы используете механизм быстрого поиска в командном режиме или обычную команду поиска, все результаты будут выделены. Чтобы двигаться вперед между результатами, нажмите ' n 'для перемещения назад нажмите'n'

в обычном режиме выполнить быстрый поиск слова под курсором и перейти к следующему вхождение в одной команде нажмите"*", вы также можете найти слово под курсором и перейти к предыдущему вхождению, нажав"#"

в обычном режиме быстрый поиск также может быть вызван с помощью

/searchterm<Enter>

удалить блики на использование ocuurences, я связывала эту ссылку в мой .vimrc

:nohl

мой любимый для этого -Марк.ВИМ плагин. Это позволяет выделить несколько слов в разных цветах одновременно.

Пример Скриншот


использовать autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

убедитесь, что у вас есть IncSearch установить что-то. е.г call s:Attr('IncSearch', 'reverse'). В качестве альтернативы вы можете использовать другую группу подсветки вместо нее.

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


Почему бы просто не: z/

это выделит текущее слово под курсором и любые другие вхождения. И вам не нужно давать отдельную команду для каждого элемента, который вы ищете. Возможно, это недоступно в нечестивом gvim? По умолчанию он находится в vim.

* хорошо, только если вы хотите, чтобы курсор переместился к следующему вхождению. При сравнении двух вещей визуально вы часто не хотите, чтобы курсор перемещался, и это раздражает, чтобы нажать клавишу * каждый раз.


  1. добавить эти строки в свой

" highlight the searched items set hlsearch " F8 search for word under the cursor recursively , :copen , to close -> :ccl nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

  1. перезагрузите настройки с помощью :so%
  2. в нормальной модели перейдите к слову.

  3. нажмите * нажмите F8 для рекурсивного поиска ниже всего вашего проекта над словом


чтобы выделить слово без перемещения курсора, plop

" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>

в ваш vimrc.

что хорошего в этом g* и g# по-прежнему будет работать как "нормальный"* и #.


установить hlsearch off, вы можете использовать " короткую форму "(если у вас нет другой функции, которая начинается с " noh " в командном режиме)::noh. Или вы можете использовать длинную версию: :nohlsearch

для крайнего удобства (я обнаружил, что переключаю hlsearch может быть, 20 раз в день), Вы можете отобразить что-то для переключения hlsearch вот так:

" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>

.:. если <leader> и \ (по умолчанию), вы можете нажать \st (быстро) в нормальный режим переключения hlsearch.

или, может быть, вы просто хотите иметь :noh сопоставляется:

" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>

выше просто работает :nohlsearch (в отличие от :set hlsearch!) он по-прежнему будет выделять слово в следующий раз, когда вы нажмите * или # на нормальный режим.

ура