Выделить все вхождения выбранного слова?
Как я могу выделить все вхождение выбранного слова в 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
означает выделение всех вхождений текущего поиска и *
означает поиск слова под курсором.
сначала убедитесь, что 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.
* хорошо, только если вы хотите, чтобы курсор переместился к следующему вхождению. При сравнении двух вещей визуально вы часто не хотите, чтобы курсор перемещался, и это раздражает, чтобы нажать клавишу * каждый раз.
- добавить эти строки в свой
" 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>
- перезагрузите настройки с помощью
:so%
в нормальной модели перейдите к слову.
нажмите * нажмите 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!
) он по-прежнему будет выделять слово в следующий раз, когда вы нажмите * или # на нормальный режим.
ура