我。问题
我的目标如下:
我有一行文字,如
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>"
我还会在BufWritePre
和BufWritePost
上触发将CGJ从磁盘上的文件中删除。
III。问题
除了CGJ之外,Vim中是否存在无操作字符(或者一种产生方式)?理想情况下,由于Vim正则表达式处理组合字符的方式the<CGJ>
与/the
的搜索不匹配,因此非合并字符。
有没有更好的方法来实现我想要的行为?
答案 0 :(得分:2)
你是对的,目前没有好的方法来标记静态匹配,并在附近进行编辑时保持最新。我的方法比你的kludge更差:在匹配中包含行/列信息(通过\%l
和\%v
特殊原子),并尝试使用标记组合更新那些(适用于行改变)和行内自定义差异。
虽然你使用特殊的Unicode字符很聪明,但它(正如你承认的那样)是一个黑客。我已经要求你在评论中使用,我仍然不完全满意/相信。如果您能够提出好的,真实的用例和当前的痛点,请将它们引导到vim_dev mailing list(最好附带功能性草案补丁)。跟踪这些文本的功能基本上是存在的(在Vim内部),它尚未被跟踪并暴露给用户/ Vimscript。虽然Vim的开发(经常令人沮丧)缓慢,但有一个令人信服的论点,新功能可以而且确实会发生。
答案 1 :(得分:0)
如何使用标记?
将光标移动到您想要的单词,设置小写字母标记(例如mz
),然后为\%'zthe