突出显示所选单词的所有出现?

Mat*_*con 143 vim macvim

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

wil*_*ell 187

在普通模式下:

:set hlsearch
Run Code Online (Sandbox Code Playgroud)

然后搜索与所述命令的图形/在正常模式下,或者<Ctrl>o随后/在插入模式.*在普通模式下,将搜索光标下的下一个单词.hlsearch如果设置,该选项将突出显示所有这些选项.#将搜索该单词的上一个出现位置.

要删除上一个搜索的突出显示:

:nohlsearch
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你打算大量切换`hlsearch`,你可能想要映射`:set hlsearch!`而不是`:set nohlsearch`.这会切换设置而不是始终将其关闭. (30认同)
  • 而不是`:nohlsearch`,你可以使用`:noh` (7认同)
  • 没有搜索的高光:http://stackoverflow.com/a/26088438/1316649 (3认同)
  • 在`.vimrc` 中设置:`noremap &lt;F4&gt; :set hlsearch! hlsearch?&lt;CR&gt;` 用于通过 `&lt;F4&gt;` 在突出显示和删除突出显示之间切换。 (2认同)

sle*_*ate 108

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

  • 只有`&hlsearch`开启. (31认同)
  • 它也会跳转到光标下的下一个单词.如果要跳转到上一个匹配项,请使用"#". (9认同)
  • 我可以让它留在现在的位置吗? (6认同)

cla*_*ccs 22

我知道这不是一个非常古老的问题,但如果有人对此功能感兴趣,可以查看此代码 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
Run Code Online (Sandbox Code Playgroud)


Ser*_*ujo 18

最简单的方法,键入正常模式 *

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

"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
Run Code Online (Sandbox Code Playgroud)

通过单击选择单词

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

额外奖励: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>
Run Code Online (Sandbox Code Playgroud)

用鼠标选择单词并立即计算出现次数:OBS:请注意,在这个版本中我们最后有"CountWord"命令

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

  • 那么当我输入“*”后,如何关闭突出显示? (2认同)

Yve*_*reY 9

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

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

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   
Run Code Online (Sandbox Code Playgroud)

它允许多个突出显示,持久性等.

要删除突出显示,请:

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

  • 我认为`*`将无条件地移动光标.我无法看到"incsearch"如何令人讨厌,因为它只是"向前看",在没有实际改变你的位置的情况下执行当前搜索. (3认同)
  • 你也可以做`:让@/='hilight_this'`,假设你启用了'hlsearch`.它突出显示文本而不跳跃,您不必更改现有设置.这会更改当前存储在搜索寄存器中的值. (3认同)
  • 如果启用了增量搜索,则基于搜索的解决方案仅移动光标.你可以这样关掉它:`:set noincsearch`.在我看来,它是Vim中最烦人的功能之一,也是我为全新安装禁用的首要功能之一. (2认同)
  • 哇...你是对的.我假设关闭`incsearch`会阻止运动,但快速测试证实你是正确的.我很抱歉.但是,创建阻止移动的映射非常容易:`:nnoremap**N`.我无法相信你_don't_发现你在执行搜索时光标跳过整个屏幕很烦人.但是......这些事情完全是主观的.Viveladifférence;-) (2认同)