我正在搜索某种模式,在搜索结果之间导航,同时我希望突出显示其他模式。例如,我在项目中某个函数的调用之间跳转,通常在其周围有一个名为“ session”的变量,我希望突出显示该单词。
:match StatusLineTerm /session/


其中StatusLineTerm只是具有我喜欢的颜色的现有高光组的名称。这个match命令使用光标下的单词作为匹配模式?像nnoremap <F5> :match StatusLineTerm /.expand(<cword>)/一样,但实际上可以工作吗?

#1 楼

要快速解决,请尝试以下操作:

:nnoremap <F5> :match StatusLineTerm /<C-R><C-W>/<CR>


它使用Ctrl-RCtrl-W将光标下方的单词插入命令行。请参阅:help c_CTRL-R_CTRL-W

#2 楼

我为此使用一个插件:有趣的单词。它并不大,因为它的唯一功能是将具有定义的颜色或随机颜色的单词高亮显示,优点是在单个键下可以具有多个颜色/高亮显示。如果需要,您也可以轻松清除使用该插件完成的所有突出显示。

评论


并非完全是我想要的(例如,我不想在有趣的单词之间导航),但这是需要调查或可以使用的东西。

–lesnik
18/09/26'9:02

#3 楼

我为此使用mark.vim-plugin。它可以同时处理许多有趣的单词,并允许在突出显示的单词之间跳转。

#4 楼

在将光标停留一小段时间后,您将自动执行以下操作:
:au CursorHold * :exec 'match Search /\V\<' . expand('<cword>') . '\>/'

默认情况下,这将在闲置4秒钟后突出显示光标下方的单词。使用:set updatetime=100使其在0.1秒后发生。
如果要在脚本中而不是一次性完成此操作,请将其放在自动组中,这样就不必每次都添加新的CursorHold自动命令脚本运行:
augroup highlight_current_world
  au!
  au CursorHold * :exec 'match Search /\V\<' . expand('<cword>') . '\>/'
augroup END


评论


欢迎来到Vi和Vim!您可能希望通过自动分组显示此信息,因为这是最佳做法。

– D. Ben Knoble♦
20年6月1日在23:27

我绝对不想这样做,但是非常感谢,这是一个很酷的窍门!

–lesnik
20年6月2日在6:52

@ D.BenKnoble好主意,完成了。

–塔基斯
20年6月2日在23:13

#5 楼

您表明您正在尝试使映射与<cword>一起使用。尽管您接受的答案很好,但我很惊讶没有人正确使用该答案。

通常,映射的RHS上的字符串实际上是作为Ex命令执行的。不会进行字符串的预扩展/评估/处理。因此,:match in

:nnoremap <F5> :match StatusLineTerm /.expand(<cword>)./


(沿着您的尝试行)将尝试从字面上匹配字符串'.expand()。'

如果要扩展/求值字符串或字符串的一部分,我们必须自己将其作为表达式传递给:exec命令:

:exec 'match StatusLineTerm /' . expand('<cword>') . '/'


请注意,我们用引号将要使用的所有部分都用引号引起来,并用.附加它们。其余的被评估。 (还请注意,<cword>是一个特殊的字符串,在传递给expand()之前需要加引号。)

因此,您最初想要的映射是:

:nnoremap <F5> :exec 'match StatusLineTerm /' . expand('<cword>') . '/'<CR>