एकल-अंक अंकों के विभाजक के साथ संख्यात्मक शाब्दिकों का हाइलाइटिंग सिंटैक्स


9

C ++ 14 ने हमें बड़े संख्यात्मक अंकों के अंकों को अलग करने के लिए एकल उद्धरणों का उपयोग करने का विकल्प प्रदान किया। यह विम के सिंटैक्स हाइलाइटिंग को तोड़ता है।

उदाहरण के लिए, निम्नलिखित 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;
}

जब मैं इसे विम में देखता हूं, तो मैं निम्नलिखित सिंटैक्स हाइलाइटिंग देखता हूं (ध्यान दें कि मैं कुछ अतिरिक्त हाइलाइटिंग स्क्रिप्ट का उपयोग कर रहा हूं ):

ऊपर वर्णित कार्यक्रम के लिए विम सिंटैक्स हाइलाइटिंग

मैं चाहूंगा कि सभी अंक huge_number_againलाल दिखाई दें। क्या कोई संशोधन है जो मैं अपनी एक सिंटेक्स फाइल बना सकता हूं या ~/.vimrcइसे ठीक करने के लिए?


मैं देख रहा हूँ कि C ++ 14 के लिए कुछ समर्थन v7.4.923 (बाइनरी लिटरल्स) में जोड़ा गया था। लेकिन ऐसा नहीं है कि संख्या विभाजक ऐसा लगता है: - / यहाँ से नवीनतम C ++ फ़ाइलों को भी अभी तक ऐसा नहीं लगता है।
मार्टिन टूरनोइज

4
त्वरित सुधार के लिए, आप शायद जोड़ सकते हैं syn match cNumber display contained "\d\(\d\|'\)*\(u\=l\{0,2}\|ll\=u\)\>"करने के लिए ~/.vim/syntax/cpp.vim। (Btw, कि अगर सी है ++, उपयोग cstdlib, नहीं stdlib.h ।)
muru

3
मैंने अभी देखा कि मई 2014 के बाद से एक खुला मुद्दा है btw।
मार्टिन टूरनोइज

@ मुरू लगता है कि समस्या ठीक हो गई है। मैं अब के लिए एक त्वरित हैक का उपयोग कर के साथ ठीक हूँ। धन्यवाद!
जेक

2
@Carpetsmoker मुझे पता नहीं है कि सिंटैक्स का मिलान वास्तव में यह जानने के लिए है कि मेरा परिवर्तन क्या करता है। मुझे लगता है कि यह किसी भी अंक या एकल उद्धरणों के बाद किसी भी अंक से मेल खाएगा, साथ ही ullफुलाना, लेकिन मुझे नहीं पता कि यह कुछ अमान्य मामले से मेल खाएगा या नहीं। और जाहिरा तौर पर C ++ 14 ऑक्टल, बाइनरी, हेक्स शाब्दिक और फ्लोट में विभाजक और फ़्लोट्स में दशमलव बिंदु के बाद अनुमति देता है। यह एक बहुत अधिक की तुलना में मैं लेने के लिए तैयार हूँ।
मुरु

जवाबों:


4

Vim-jp / vim-सीपीपी रेपो शामिल इस परिवर्तन जुलाई 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.