什么vim模式匹配以dot结尾的数字?

时间:2013-02-28 08:06:57

标签: vim syntax vim-syntax-highlighting

在PDP11 / 40汇编语言中,以点结尾的数字被解释为十进制数。 我使用以下模式但无法匹配该表示法,例如8.

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

当我用\.替换D时,模式可以匹配8D而没有任何问题。谁能告诉我我的“end-with-dot”模式有什么问题?感谢。

3 个答案:

答案 0 :(得分:2)

您的正则表达式语法很好(嗯,您可以使用\d代替[0-9]),但您的'iskeyword'值不包含句点.,所以你无法匹配词尾\>)。

看起来您正在为自定义文件类型编写语法。

是一种选择
:setlocal filetype+=.

在相应的~/.vim/ftplugin/asmpdp11.vim文件类型插件中。当句点字符被视为语法中的关键字字符时,请执行此操作。

否则,删除\>以使正则表达式匹配。如果你想确保在句号之后没有非空白字符,你可以在匹配后断言该条件,例如像这样:

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

答案 1 :(得分:1)

请注意,vim将单词定义为:

  

单词由一系列字母,数字和下划线组成,或者a   其他非空白字符的序列,用空格分隔   (空格,制表符)。这可以通过'iskeyword'来改变   选项。空行也被认为是一个单词。

所以如果空格跟随数字,你的模式就可以了。您可能想跳过\>

答案 2 :(得分:1)

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

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

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