例如,我们的文字是:
hello world
abcd hello world
hello world
在eclipse中,当光标位于某个单词时,单词hello
在当前文件中自动高亮显示。当您在正常模式下键入ww
时,光标位于当前文件中突出显示的其他字world
,hello
会自动取消突出显示。此功能对用户来说非常方便。
vim是否可以使用某些插件执行此操作?
答案 0 :(得分:6)
这样的东西?
set updatetime=10
function! HighlightWordUnderCursor()
if getline(".")[col(".")-1] !~# '[[:punct:][:blank:]]'
exec 'match' 'Search' '/\V\<'.expand('<cword>').'\>/'
else
match none
endif
endfunction
autocmd! CursorHold,CursorHoldI * call HighlightWordUnderCursor()
这不会破坏搜索寄存器,但会使用与通常使用的相同的突出显示。 (如果要为该突出显示组添加不同的突出显示颜色Search
。)需要较短的更新时间,以便相当频繁地触发CursorHold事件。如果光标位于标点符号或空格上方,它也不会突出显示任何内容。
iskeyword
设置确定在使用expand('<cword>')
时被视为单词的一部分。
答案 1 :(得分:3)
是的,有一个vim插件可以自动突出显示单词的出现。此one专门针对 .php 文件中的$variables
和->properties
实施。
DEMO:
here是同一个,但适用于 Perl 文件。
DEMO:
您可以为您的目的修改它。
希望这有帮助。
答案 2 :(得分:3)
vim.wikia.com上有一个脚本可以完全执行此操作。它等待,直到您停止移动光标,然后突出显示当前单词的所有实例。然后,您可以像使用搜索结果一样,使用n
和N
在它们之间跳转。
我正在复制它,以防链接出现故障:
" 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
如该页面上的评论中所述,如果您始终需要此功能,则可以在定义后从vimrc
调用该功能。这样您可以使用z/
(或指定的任何快捷方式)稍后再将其关闭。
答案 3 :(得分:0)
改进@FDinoff的惊人答案,使用自定义突出显示-黑色BG和下划线,并在quickfix列表,逃犯文件类型和diff上禁用:
function! HighlightWordUnderCursor()
let disabled_ft = ["qf", "fugitive", "nerdtree", "gundo", "diff", "fzf", "floaterm"]
if &diff || &buftype == "terminal" || index(disabled_ft, &filetype) >= 0
return
endif
if getline(".")[col(".")-1] !~# '[[:punct:][:blank:]]'
hi MatchWord cterm=undercurl gui=undercurl guibg=#3b404a
exec 'match' 'MatchWord' '/\V\<'.expand('<cword>').'\>/'
else
match none
endif
endfunction
augroup MatchWord
autocmd!
autocmd! CursorHold,CursorHoldI * call HighlightWordUnderCursor()
augroup END