Підкреслення синтаксису Vim числових буквених знаків з одноцитатними розділовими знаками


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

Коли я переглядаю це у Vim, я бачу таке виділення синтаксису (зауважте, що я використовую деякі додаткові сценарії виділення ):

Підсвічування синтаксису Vim для програми, описаної вище

Я хотів би, щоб усі цифри в них стали 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, якщо це C ++, використовуйте cstdlib, ні stdlib.h .)
muru

3
Щойно я помітив, що з травня 2014 року до цього року відкрите питання .
Мартін Турноїй

@muru Це, здається, вирішило проблему. Я зараз добре використовую швидкий злом. Дякую!
Джейк

2
@Carpetsmoker Я не впевнений у відповідності синтаксису, щоб точно знати, що робить моя зміна. Я думаю, що це буде просто відповідати цифрі після будь-якої кількості цифр або одинарних лапок, плюс ullпуху, але я не знаю, чи відповідатиме він недійсному випадку. І, мабуть, C ++ 14 дозволяє розділяти октальні, двійкові, шістнадцяткові букви та поплавці та після десяткової крапки у поплавках. Це набагато більше, ніж я готовий взяти на себе.
муру

Відповіді:


4

ВІМ-JP / ВІМ-каст репо включені ці зміни в липні 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.