181

如何在 GVim 中突出显示所有出现的选定单词,例如在 Notepad++ 中?

4

15 回答 15

232

在普通模式下:

:set hlsearch

/然后在普通模式下使用命令搜索模式,或者在插入模式下搜索模式<Ctrl>o。在普通模式下将搜索光标下单词的下一个出现。如果设置,该选项将突出显示所有这些。将搜索之前出现的单词。/*hlsearch#

要删除先前搜索的突出显示:

:nohlsearch

您可能希望映射:nohlsearch<CR>到一些方便的键。

于 2010-08-07T16:38:36.587 回答
141

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

于 2010-08-07T16:36:42.907 回答
23

我知道这是一个非常老的问题,但是如果有人对此功能感兴趣,可以查看此代码 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
于 2014-09-28T18:56:08.813 回答
21

最简单的方法,在普通模式下输入*

我也有这些映射来启用和禁用

"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>
于 2011-10-15T17:12:51.413 回答
10

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

另一种方法是使用增强的 mark.vim插件,然后完成.vimrc让双击触发突出显示(我不知道键盘选择如何触发命令):

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

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

要删除突出显示,请:

  • 再次双击
  • :Mark(关闭直到下一个选择)
  • :MarkClear
于 2011-10-14T18:58:12.240 回答
4

首先(或在您的 .vimrc 中):

:set hlsearch

然后将光标放在要突出显示的单词上,然后点击*

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

于 2010-08-07T16:47:12.407 回答
4

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

" 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#仍然会像“正常”*#.


要启动,您可以使用“short-form”(除非您在命令模式下有另一个以“noh”开头的功能)hlsearch: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!)它仍然会在您下次按下*#正常模式下突出显示单词。

干杯

于 2017-06-21T14:58:11.817 回答
4

例如这个插件:

只需在vimawesome.com中的光标下搜索

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

它如何与搜索不冲突的屏幕截图: 在此处输入图像描述 注意:

  • vim-illuminate 默认高亮,在我的屏幕截图中我切换到下划线
  • vim-illuminate 默认情况下突出显示/下划线光标下的单词,在我的屏幕截图中我取消了它
  • 我的配色方案非常灰色。检查你的也可以定制它。
于 2020-05-25T00:18:38.087 回答
3

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

:set hlsearch

您也可以将其添加到您的 .vimrc 文件中

set hlsearch

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

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

在正常模式下,快速搜索也可以使用

/searchterm<Enter>

要删除使用时的突出显示,我已将其绑定到我的 .vimrc 中的快捷方式

:nohl
于 2010-08-09T04:29:30.113 回答
2
set hlsearch

也许 ?

于 2010-08-07T16:38:21.407 回答
2

启用搜索突出显示:

:set hlsearch

然后搜索这个词:

/word<Enter>
于 2010-08-07T16:38:44.377 回答
2

我最喜欢这样做的是mark.vim插件。它允许同时突出显示不同颜色的多个单词。

示例截图

于 2010-08-09T04:51:21.873 回答
1

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

确保你已经IncSearch设置了一些东西。例如call s:Attr('IncSearch', 'reverse')。或者,您可以使用另一个突出显示组来代替它。

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

于 2015-10-02T12:22:50.743 回答
0

为什么不只是:z/

这将突出显示光标下的当前单词和任何其他出现。而且您不必为要搜索的每个项目提供单独的命令。也许这在邪恶的 gvim 中不可用?默认情况下它在 vim 中。

* 仅在您希望光标移动到下一个匹配项时才有效。在视觉上比较两件事时,您通常不希望光标移动,而且每次都按 * 键很烦人。

于 2014-08-08T20:00:16.900 回答
0
  1. ~/.vimrc在文件中添加这些行

" 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 在整个项目中递归搜索单词

于 2017-05-27T05:41:36.217 回答