単一引用符で区切られた数値リテラルの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赤で表示したい。構文ファイルの1つに、または~/.vimrcこれを修正するために行うことができる変更はありますか?


C ++ 14のサポートがv7.4.923(バイナリリテラル)に追加されたようです。しかし、数字の区切り文字ではないようです:-/ ここからの最新のC ++ファイルにもまだ含まれていないようです。
Martin Tournoij 2016年

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月以来、未解決の問題があることに気づきました。
Martin Tournoij 2016年

@muru問題は解決したようです。とりあえず、クイックハックを使って問題ありません。ありがとう!
ジェイク

2
@Carpetsmoker私の変更が何をするのかを正確に知るために、構文の一致について確信が持てません。数字の後に続く任意の桁数または一重引用符に加えて、ull綿毛と一致するだけだと思いますが、無効なケースと一致するかどうかはわかりません。そしてどうやらC ++ 14では、8進数、2進数、16進数のリテラル、浮動小数点数、および浮動小数点数の小数点の後に区切り記号を使用できます。それは私が引き受けたいと思っている以上のものです。
muru、2014年

回答:


4

VIM-JP / VIM-CPPのレポが含まれ、この変更 2016年7月中に:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.