在 PDP11/40 汇编语言中,以点结尾的数字被解释为十进制数。我使用以下模式,但无法匹配该表示法,例如8.
:
syn match asmpdp11DecNumber /\<[0-9]\+\.\>/
当我\.
用D
模式替换时可以匹配8D
没有任何问题。谁能告诉我我的“以点结尾”模式有什么问题?谢谢。
在 PDP11/40 汇编语言中,以点结尾的数字被解释为十进制数。我使用以下模式,但无法匹配该表示法,例如8.
:
syn match asmpdp11DecNumber /\<[0-9]\+\.\>/
当我\.
用D
模式替换时可以匹配8D
没有任何问题。谁能告诉我我的“以点结尾”模式有什么问题?谢谢。
您的正则表达式语法很好(好吧,您可以使用\d
代替[0-9]
),但您的'iskeyword'
值不包括句点.
,因此您无法匹配其后的词尾( \>
)。
看起来您正在为自定义文件类型编写语法。一种选择是
:setlocal filetype+=.
在相应的~/.vim/ftplugin/asmpdp11.vim
文件类型插件中。当句点字符在您的语法中被视为关键字字符时,请执行此操作。
否则,删除\>
以使正则表达式匹配。如果要确保句点后没有非空白字符,可以在匹配后断言该条件,例如:
:syn match asmpdp11DecNumber /\<\d\+\.\S\@!/
请注意,一个词被 vim 定义为:
一个单词由一系列字母、数字和下划线或一系列其他非空白字符组成,用空格(空格、制表符、)分隔。这可以通过 'iskeyword' 选项进行更改。空行也被认为是一个单词。
因此,如果空格跟在数字后面,则您的模式可以正常工作。您可能想跳过\>
.
我认为问题在于您的词尾边界标记。尝试这个:
syn match asmpdp11DecNumber /\<[0-9]\+\./
请注意,我已经删除了\>
词尾边界。我不确定那是做什么用的,但是如果您将其删除,它似乎可以工作。A.
不被视为单词的一部分,这就是您的版本失败的原因。