【问题标题】:how to highlight all occurrences of a word in vim on double clicking如何在双击时突出显示vim中所有出现的单词
【发布时间】:2011-10-16 03:39:03
【问题描述】:

我在 Windows 上使用 notepad++,在 Linux 上使用 vim。我真的很喜欢 vim。但至少有一件事我觉得在记事本++中非常有趣。您可以双击一个单词,它会自动突出显示该单词的所有出现。我想知道我是否可以用 vim 做类似的事情?所以问题是如何在 vim 中双击单词时突出显示所有出现的单词。

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

您可能希望在 vim 中避免使用鼠标,但我在这里例外:)。

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

【问题讨论】:

  • * 会将光标移动到下一个出现的单词。

标签: vim highlighting


【解决方案1】:

您可以通过简单的映射将 * 映射为双击:

:map <2-LeftMouse> *

如果你想在插入模式下使用上述功能,你可以使用这个映射:

:imap <2-LeftMouse> <c-o>*

如果没有 (Ctrl-o),* 将被打印

[编辑] 正如 ZyX 指出的那样,如果您想确保 * 或 &lt;c-o&gt; 将被映射到其他东西,那么使用 noremap 和 inoremap 总是一个好主意,这个递归映射不会是展开。

【讨论】:

  • @aminfar:我很高兴能帮上忙 ;) 我还了解到 * 会搜索光标下的单词 XD 这就是我喜欢 VIM 的一点:你每天都会学到一个巧妙的新技巧; )
  • 您应该使用noremap 和inoremap。它将使映射免疫重新映射* 和&lt;C-o&gt;。
  • * 将光标移动到下一个单词。如果您想将光标保持在当前单词上,请尝试map &lt;2-LeftMouse&gt; *#。
  • @Yep_It's_Me - 这会使光标重新开始 - 那会完成什么?不明白你的意思
  • @serup 它将光标保持在您单击的单词上,而不是将其移动到下一个匹配项。
【解决方案2】:

如果你想像*这样突出光标下的单词,但不想移动光标,那么我建议如下:

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

基本上,此命令将搜索寄存器 (@/) 设置为当前单词并打开 'hlsearch',以便突出显示结果。通过设置@/,光标不会像* 或# 那样移动。

解释:

  • &lt;silent&gt; - 执行后不显示命令
  • &lt;2-LeftMouse&gt; - 鼠标左键双击
  • @/ 是用于/ 和? 搜索的寄存器
  • expand('&lt;cword&gt;')获取光标下的当前单词
  • escape(pattern, '\') 在元字符的情况下转义正则表达式
  • \V 使用非魔法模式,所以所有元字符都必须用 / 转义
  • \&lt; 和 \&gt; 确保当前单词位于单词边界
  • set hls 设置 'hlsearch' 以使突出显示出现

如果设置@/ 寄存器不是您的菜,那么您可以使用:match,如下所示:

nnoremap <silent> <2-leftMouse> :exe 'highlight DoubleClick ctermbg=green guibg=green<bar>match DoubleClick /\V\<'.escape(expand('<cword>'), '\').'\>/'<cr>

要清除匹配项,只需使用:

:match none

【讨论】:

  • 这是我的 .vimrc 文件中最有用的行之一。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 2014-10-15
  • 2013-11-27
  • 2012-03-02
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
相关资源
最近更新 更多