我正在尝试为我正在编写的Vim插件编写语法规则,但是我在编写一个能够匹配以@
符号开头和由两个字母后跟任意数量接受字符组成的标识符的Vim正则表达式时遇到了困难。以下是我目前的代码:
syntax match aldaAtMarker "\v@[a-zA-Z]{2,}[\w[:digit:]\-+'()]*"
我知道
@
后面的所有内容(至少据我所知)都有效,因为我是从一个名为aldaIdentifier
的规则中复制粘贴而来的,该规则似乎能正常工作。但是,我在插入前缀文字@
符号时遇到了麻烦,因为Vim正则表达式系统显然赋予@
特殊含义(请参见:help syntax
并查找@
)。按照我上述的语法规则,尝试加载插件会导致以下错误:
Error detected while processing /home/dave/.vim/bundle/vim-alda/syntax/alda.vim:
line 21:
E866: (NFA regexp) Misplaced @
Press ENTER or type command to continue
Error detected while processing /home/dave/.vim/bundle/vim-alda/syntax/alda.vim:
line 21:
E64: @ follows nothing
Press ENTER or type command to continue
Error detected while processing /home/dave/.vim/bundle/vim-alda/syntax/alda.vim:
line 21:
E475: Invalid argument: aldaAtMarker "\v@[a-zA-Z]{2,}[\w[:digit:]\-+'()]*"
Press ENTER or type command to continue
如果我使用
\@
替换@
,就不会出现错误,但是错误的地方被突出显示,这让我想到我的正则表达式中的\@
被特殊解释了,而不是被视为字面意义上的@
字符。显然我漏掉了什么,我的谷歌搜索也失败了。在"very magic"(
\v
)模式下,如何在Vim正则表达式中包含一个字面上的@
符号?
/@
和/\v\@
之间不应该有任何区别。当你说“如果我用@替换@,就没有错误,但是会高亮显示错误的地方”,那么具体是哪些错误呢? - sidyll@voiceIn
这样的东西被突出显示,而是像a
、a+
和a+2
这样的东西被突出显示。 - Dave Yarwood@voiceIn
被突出显示之外,我还看到其他东西也被突出显示了。 - Dave Yarwood