Tek tırnaklı basamak ayırıcılarıyla sayısal değişmezlerin vim sözdizimi vurgulaması


9

C ++ 14, büyük sayısal değişmezlerin rakamlarını ayırmak için tek tırnak kullanma seçeneği sağladı. Bu, Vim'in sözdizimi vurgulamasını bozar.

Örneğin, aşağıdaki C ++ 14 programını göz önünde bulundurun:

#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;
}

Bunu Vim'de görüntülediğimde, aşağıdaki sözdizimi vurgulamasını görüyorum (bazı ek vurgulama komut dosyaları kullandığımı unutmayın ):

Yukarıda açıklanan program için Vim sözdizimi vurgulama

Tüm rakamların huge_number_againkırmızı görünmesini istiyorum. Sözdizimi dosyalarımdan birinde veya ~/.vimrcbunu düzeltmek için yapabileceğim bir değişiklik var mı ?


V7.4.923 (ikili değişmez değerler) içinde C ++ 14 için bazı destek eklendiğini görüyorum. Ama sayı ayırıcı görünüyor: - / son C ++ dosyaları buradan da henüz buna sahip görünmemektedir.
Martin Tournoij

4
Hızlı bir düzeltme için, muhtemelen ekleyebilir syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"için ~/.vim/syntax/cpp.vim. (Btw, bu C ++ ise, kullanın cstdlib, değil stdlib.h .)
muru

3
Mayıs 2014'ten bu yana açık bir sorun olduğunu fark ettim .
Martin Tournoij

@muru Bu sorunu çözmüş görünüyor. Şimdilik hızlı bir kesmek kullanmakta iyiyim. Teşekkürler!
Jake

2
@Carpetsmoker Sözdizim eşleşmesinin tam olarak ne yaptığımı bilmek istediğinden emin değilim. Ben sadece herhangi bir rakam veya tek tırnak, artı ullkabartmak takip bir rakam eşleşecek düşünüyorum , ama bazı geçersiz dava maç olup olmadığını bilmiyorum. Ve görünüşe göre C ++ 14, sekizlik, ikili, onaltı değişmez ve yüzer ve ayırıcıdaki ondalık noktadan sonra ayırıcıya izin verir. Bu benim almak istediğimden çok daha fazla.
muru

Yanıtlar:


4

Vim-jp / vim-cpp repo dahil bu değişikliği temmuz 2016 yılında:

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\)\>"

Bu repoyu kullanmak istemiyorsanız, bu satırları ekleyebilirsiniz ~/.vim/syntax/cpp.vim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.