2013-02-28 67 views
3

在PDP11/40汇编语言中,以点结尾的数字被解释为十进制数。 我用下面的模式,但不能匹配符号,例如,8.什么vim模式匹配以点结尾的数字?

syn match asmpdp11DecNumber /\<[0-9]\+\.\>/ 

当我与D取代\.模式可以毫无问题匹配8D。任何人都可以告诉我,我的“结束点”模式有什么问题吗?谢谢。

+0

+1 for PDP11 reference ... – L0j1k 2013-02-28 08:11:18

回答

2

你的正则表达式语法是好的(当然,你可以使用\d代替[0-9]),但你的'iskeyword'值不包括期间.,所以后结束字\>),它可以不匹配。

看起来你正在编写自定义文件类型的语法。一种选择是

:setlocal filetype+=. 

在相应的~/.vim/ftplugin/asmpdp11.vim filetype插件。当句法字符在您的语法中被认为是关键字字符时执行此操作。

否则,请删除\>以使正则表达式匹配。如果你想确保在这段时间后没有非空白字符,你可以在比赛结束后断言这种情况,例如,像这样:

:syn match asmpdp11DecNumber /\<\d\+\.\S\@!/ 
1

注意,一个字由VIM定义为:

甲字由字母,数字和下划线的序列,或其他非空白字符的 序列,以空格 (分离的空格,标签)。这可以通过'iskeyword' 选项进行更改。一条空行也被认为是一个词。

所以你的模式工作正常,如果空格跟在数字后面。您可能想要跳过\>

1

我认为这个问题是你的单词边界标记。试试这个:

syn match asmpdp11DecNumber /\<[0-9]\+\./ 

请注意,我已经删除了\>字末端边界。我不确定那里有什么,但是如果你删除它,它似乎就起作用了。 A .不被视为单词的一部分,这就是您的版本失败的原因。

相关问题