如何在 VIM 中突出显示选定单词的所有匹配项?

如何在 GVim 中突出显示选定单词的所有匹配项,就像在 Notepad + + 中一样?

171126 次浏览

*键将突出显示光标下单词的所有匹配项。

set hlsearch

也许?

正常模式:

:set hlsearch

然后在正常模式下搜索命令 /的模式,或者在插入模式下搜索命令 <Ctrl>o后跟 /的模式。在正常模式下,*将搜索光标下的单词的下一个匹配项。如果设置了,hlsearch选项将突出显示所有这些选项。#将搜索先前出现的单词。

删除前一次搜索的亮点:

:nohlsearch

您可能希望将 :nohlsearch<CR>映射到某个方便的键。

启用搜索高亮显示:

:set hlsearch

然后搜索这个词:

/word<Enter>

第一个(或在.vimrc 中) :

:set hlsearch

然后将光标置于要突出显示的单词上,并按 *

hlsearch表示突出显示当前搜索的所有匹配项,*表示搜索光标下的单词。

首先,通过发出以下命令确保启用 hlsearch

:set hlsearch

您还可以按照设置将其添加到.vimrc 文件中

set hlsearch

现在,当您在命令模式或常规搜索命令中使用快速搜索机制时,所有结果都将突出显示。要在结果之间前进,请按’n’向后移动,请按’N’

在正常模式下,要快速搜索光标下的单词并在一个命令中按“ *”跳转到下一个匹配项,还可以搜索光标下的单词并按“ #”移动到上一个匹配项

在正常模式下,还可以使用

/searchterm<Enter>

为了删除出现使用的突出显示,我已经将它绑定到我的.vimrc 中的一个快捷方式

:nohl

我最喜欢的是 Mark Vim插件。 它允许同时突出显示几个不同颜色的单词。

示例截图

基于搜索的解决方案(*/...)移动光标,这可能是不幸的。

另一种选择是使用 增强型 Mark.vim插件,然后完成你的 .vimrc,让双击触发高亮显示(我不知道如何键盘选择可以触发一个命令) :

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

它允许多个突出显示、持久性等。

删除高亮部分:

  • 再次双击
  • :Mark(关闭直到下一次选择)
  • :MarkClear

最简单的方法是在普通模式下键入 *

我还需要启用和禁用这些映射

"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>

为什么不只是: Z/

这将突出显示光标下的当前单词和任何其他事件。而且您不必为您正在搜索的每个项目单独下达命令。也许这在邪恶的 Gvim 里没有?它默认处于活动状态。

只有当你想让光标移动到下一次出现时 * 才是好的。当在视觉上比较两样东西时,你通常不希望光标移动,而且每次都按 * 键很烦人。

我知道这是一个非常古老的问题,但是如果有人对这个特性感兴趣,可以检查这个代码 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

使用 autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

确保你有 IncSearch设置为某些东西。例如 call s:Attr('IncSearch', 'reverse')。或者你可以使用另一个突出显示组在它的地方。

这将毫不延迟地突出显示光标下出现的所有单词。我发现当我快速浏览代码时,延迟会减慢我的速度。突出显示的颜色将与单词的颜色相匹配,因此它将与您的方案保持一致。

  1. ~/.vimrc文件中添加这些行

突出显示搜索项 开始搜索 F8递归地在光标下搜索单词: copen,to close-> : ccl Nnoremap < F8 > : grep! “ < cword > >”.-r < CR > : copen 33 < CR >

  1. :so%重新加载设置
  2. 在正常模式下复习单词。

  3. 按下 * 按下 F8,在你的整个项目上递归地搜索

在不移动光标的情况下突出显示单词

" 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,可以使用“ short-form”(除非在命令模式中有另一个以“ noh”开头的函数) : :noh。或者你可以使用长版本: :nohlsearch

为了极大的方便(我发现自己每天可能切换 hlsearch20次) ,你可以像下面这样映射一些东西来切换 hlsearch:

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

.:.如果您的 <leader>\(默认情况下) ,您可以按 \是的T(快速)在 正常模式切换 hlsearch

或者,您可能只是希望映射 :noh:

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

以上只是运行 :nohlsearch,所以(不同于 :set hlsearch!)它仍然会突出显示单词下次按 *#正常模式。

干杯

例如这个插件:

Vimawesome.com中搜索 在光标下

正如 Clagccs提到的,关键在于突出显示 不与您的搜索冲突: https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

如何不与搜索冲突的屏幕截图: enter image description here 备注:

  • 在我的屏幕截图中,我切换到了下划线
  • Vim-默认情况下,光标下的高亮/下划线单词,在我的屏幕快照中,我取消了它
  • 我的配色方案是灰色的,你也可以自己定制一下。