带单引号数字分隔符的数字文字的Vim语法高亮


9

C ++ 14为我们提供了使用单引号分隔大数字文字的数字的选项。这破坏了Vim的语法突出显示。

例如,考虑以下C ++ 14程序:

#include <stdlib.h>

int main(int argc, char** argv) {
  // small numbers are fine
  int normal_number = 5;

  // large numbers have the correct highlighting but they're hard to visually parse
  int huge_number = 1000000000;

  // apostrophes help with visual parsing but mess up syntax higlighting
  int huge_number_again = 1'000'000'000;

  return EXIT_SUCCESS;
}

在Vim中查看此内容时,会看到以下语法突出显示(请注意,我正在使用其他一些突出显示脚本):

上述程序的Vim语法高亮

我希望输入的所有数字huge_number_again都显示为红色。我可以对其中一个语法文件进行修改,还是可以对其~/.vimrc进行更正?


我看到在v7.4.923(二进制文字)中添加了对C ++ 14的支持。但不是数字分隔看来: - /最新C ++文件从这里也似乎不拥有它呢。
马丁·图尔诺伊

4
速战速决,你也许可以添加syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"~/.vim/syntax/cpp.vim。(顺便说一句,如果是C ++,请使用cstdlib而不要 使用stdlib.h。)
muru

3
我只是注意到自2014年5月起还有一个未解决的问题
马丁·图尔诺伊

@muru似乎已经解决了问题。我现在可以使用快速破解了。谢谢!
杰克

2
@Carpetsmoker我不确定语法匹配是否确切知道我所做的更改。我认为它将匹配任意数字或单引号之后的数字,再加上ull绒毛,但是我不知道它是否将匹配某些无效的大小写。显然,C ++ 14允许使用八进制,二进制,十六进制文字和浮点数以及在浮点数小数点后的分隔符。这是一个很多超过我愿意承担。
muru

Answers:


4

VIM-JP / VIM-CPP回购包含这种变化在七月2016年

syn match   cNumber     display contained "\d\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match   cNumber     display contained "0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match   cNumber     display contained "0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"

如果您不想使用此存储库,则可以将这些行添加到中~/.vim/syntax/cpp.vim

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.