如何在双击时突出显示vim中所有单词的出现次数

时间:2011-07-29 17:34:22

标签: vim highlighting

当我在Windows上时,我使用notepad ++,而在Linux上我使用vim。我真的很喜欢vim。但至少有一件事我发现在记事本++中真的很有趣。您可以双击某个单词,它会自动突出显示该单词的所有匹配项。我想知道我是否可以用vim做那样的事情?所以问题是当你双击vim中的单词时,如何突出显示单词的所有出现。

显然,我不想搜索这个词,或者改变我的光标位置,只是突出显示。我的:set hlsearch也已开启。

可能你可能想在vim中避免鼠标,但我在这里做了一个例外:)。

我知道*做同样的工作,但鼠标呢?

2 个答案:

答案 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指出的那样,如果你想确保将noremapinoremap映射到其他内容,最好分别使用* <c-o>,这个递归映射不会被扩展。