使用 matchit 匹配反引号 --- 可能吗?

rec*_*ner 2 vim restructuredtext

我最近写了很多 RST,我希望%击键可以在重音符(即反引号)字符之间进行匹配。

`The cursor is at the |vertical line`
Run Code Online (Sandbox Code Playgroud)

然后点击%移动光标,如图所示

`The cursor is at the vertical line|`
Run Code Online (Sandbox Code Playgroud)

我试过b:match_wordsmatchit插件设置 ,但这没有帮助。

任何提示表示赞赏。

ben*_*her 5

请原谅我吹嘘自己的号角,但我是 matchit 插件的专家。

虽然它旨在扩展内置匹配功能,但 matchit 以多种方式对其进行了扩展。一方面,它允许您匹配正则表达式,而不仅仅是单个字符。使用 vim 的词首和词尾模式可以获得非常好的结果:

:let b:match_words='`\<:\>`'
Run Code Online (Sandbox Code Playgroud)

这当然适用于您提供的单行示例。类似地,您可能会决定开头`通常没有非空白字符,而结束字符后不跟非空白字符。(如果否定太多,那么“这是标记”通常会开始一个新行或跟在空格或制表符之后;并且通常跟在行尾或空格或制表符之后。)然后您可以使用

:let b:match_words='\S\@<!`:`\S\@!'
Run Code Online (Sandbox Code Playgroud)

matchit 插件试图实现 vim 的设计目标,包括:help design-documented. 标准VIM分布包括matchit.vim(脚本),并matchit.txt$VIMRUNTIME/macros/。您可以在那里阅读文档或按照说明进行操作:help matchit-install并使用 浏览文档:help

在 下:help b:match_words,它说,

Tips: Be careful that your initial pattern does not match your final pattern.
Run Code Online (Sandbox Code Playgroud)

这是因为,当您敲击%键时,脚本必须能够确定它是在开始模式还是结束模式上。做出此决定所需的唯一信息是您在b:match_words.