当我在Windows上时,我使用notepad ++,而在Linux上我使用vim。我真的很喜欢vim。但至少有一件事我发现在记事本++中真的很有趣。您可以双击某个单词,它会自动突出显示该单词的所有匹配项。我想知道我是否可以用vim做那样的事情?所以问题是当你双击vim中的单词时,如何突出显示单词的所有出现。
显然,我不想搜索这个词,或者改变我的光标位置,只是突出显示。我的:set hlsearch
也已开启。
可能你可能想在vim中避免鼠标,但我在这里做了一个例外:)。
我知道*
做同样的工作,但鼠标呢?
答案 0 :(得分:18)
如果你想突出显示光标下的单词*
,但是不想要移动光标,那么我建议如下:
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
此命令基本上将搜索寄存器(@/
)设置为当前单词并打开'hlsearch'
,以便突出显示结果。通过设置@/
,光标不会像*
或#
一样移动。
说明:
<silent>
- 一旦执行不显示命令<2-LeftMouse>
- 用鼠标左键双击@/
是用于使用/
和?
expand('<cword>')
获取光标escape(pattern, '\')
在元字符的情况下逃避正则表达式\V
使用非魔法模式,因此必须使用/
\<
和\>
确保当前字词位于字边界set hls
设置'hlsearch'
,以便突出显示如果设置@/
注册不是你的茶,那么你可以使用:match
代替:{/ p>
nnoremap <silent> <2-leftMouse> :exe 'highlight DoubleClick ctermbg=green guibg=green<bar>match DoubleClick /\V\<'.escape(expand('<cword>'), '\').'\>/'<cr>
要清除匹配,请使用:
:match none
答案 1 :(得分:14)
您可以通过简单的映射来映射*以双击:
:map <2-LeftMouse> *
如果要在插入模式下使用所述功能,可以使用此映射:
:imap <2-LeftMouse> <c-o>*
不使用(Ctrl-o)*将打印
<强> [编辑] 强>
正如ZyX指出的那样,如果你想确保将noremap
或inoremap
映射到其他内容,最好分别使用*
<c-o>
,这个递归映射不会被扩展。