是否有一种不那么奇妙的方式来在Vim中进行一次性亮点?

时间:2014-02-24 08:51:17

标签: vim

我。问题

我的目标如下:

我有一行文字,如

Who left the dead mouse in the fridge?

我希望以绿色突出显示第一个the,这只是一次。也就是说,我不想syn match ThisMagicWord "\<the\>"或任何会过分强调其他the的内容。

还有一个要求,即如果用户编辑该行上的其他文字,请说

Who on earth left the delicious dead mouse in the fridge?

突出显示将使用单词the进行跟踪,只要用户不编辑该特定单词。

II。 Kludge

现在,我有一个解决方案。事实上,我为我的解决方案感到自豪,因为想起来很棘手。但是,在任何想象中,它都不是一个好的解决方案。

事实证明,Unicode字符Combining Grapheme Joiner实际上是Vim中的无操作。它不产生字形,并且不占用宽度。这是我发现的唯一这样的角色。所以我所做的是,我偷偷地编辑了有问题的行

Who left the<CGJ> dead mouse in the fridge?

然后定义规则

syn match ThisMagicWord "the<CGJ>"

我还会在BufWritePreBufWritePost上触发将CGJ从磁盘上的文件中删除。

III。问题

  1. 除了CGJ之外,Vim中是否存在无操作字符(或者一种产生方式)?理想情况下,由于Vim正则表达式处理组合字符的方式the<CGJ>/the的搜索不匹配,因此非合并字符。

  2. 有没有更好的方法来实现我想要的行为?

2 个答案:

答案 0 :(得分:2)

你是对的,目前没有好的方法来标记静态匹配,并在附近进行编辑时保持最新。我的方法比你的kludge更差:在匹配中包含行/列信息(通过\%l\%v特殊原子),并尝试使用标记组合更新那些(适用于行改变)和行内自定义差异。

虽然你使用特殊的Unicode字符很聪明,但它(正如你承认的那样)是一个黑客。我已经要求你在评论中使用,我仍然不完全满意/相信。如果您能够提出好的,真实的用例和当前的痛点,请将它们引导到vim_dev mailing list(最好附带功能性草案补丁)。跟踪这些文本的功能基本上是存在的(在Vim内部),它尚未被跟踪并暴露给用户/ Vimscript。虽然Vim的开发(经常令人沮丧)缓慢,但有一个令人信服的论点,新功能可以而且确实会发生。

答案 1 :(得分:0)

如何使用标记?

将光标移动到您想要的单词,设置小写字母标记(例如mz),然后为\%'zthe

等单词添加高亮显示