VIM выделяет операторы #IFDEF и #IF

#vim

#vim

Вопрос:

Возможно ли выделить инструкции #DEFINE в VIM.

VIM действительно удается правильно раскрасить #if 0 , но не более сложные выражения. Вот как это выглядит:

введите описание изображения здесь

Есть ли способ исправить цвета для второго? Я работаю над базой кода с большим количеством defined, и ее действительно трудно читать без правильного выделения. Спасибо!

Комментарии:

1. Не могли бы вы показать код в виде буквального текста и тип файла, который нужно выделить?

2.Я хочу, чтобы в случае этого кода: #define AAA #ifndef AAA int x; #endif у int x кода был бы другой цвет, чем если бы он находился за пределами блока

Ответ №1:

Один из самых первых плагинов Vim, опубликованных на vim.org это плагин ifdef.

Он обеспечивает выделение для #ifdef #ifndef #else #endif блоков (но не #if defined() ) с возможностью пометить символ как определенный или неопределенный.

Комментарии:

1. Я уже нашел и установил его, но, похоже, у меня это не работает. (VIM не распознает :Define )

2. @user1637056 в syntax/ifdef.vim есть немного документации: » Использование: » Использовать в качестве синтаксического плагина (исходный файл ifdef.vim из ~/vimfiles/after/syntax/cpp.vim — » также c.vim и idl.vim )

Ответ №2:

Вы можете переопределить цвет с помощью highlight команды. Создайте файл ~/.vim/after/syntax/c.vim и добавьте следующую строку:

 highlight cDefine ctermfg=4 cterm=bold
  

define Инструкции будут выделены жирным шрифтом светло-синего цвета.

Кроме того, это может помочь вам выбрать цвет: https://github.com/guns/xterm-color-table.vim

Комментарии:

1. Спасибо, но это не отвечает на мой вопрос. Это делает #define AAA окрашенным в другой цвет. Что я хочу, так это иметь int x другой цвет

2. А, понятно. Я бы сказал, что это не определяется редактором. #define Строка полностью независима от следующей #ifdef , она могла быть где угодно раньше, даже в отдельном файле. Строка #if 0 явно может быть проанализирована как недоступный блок, но я бы сказал, что #ifdef вы хотите раскрасить, не может быть так легко проанализирована Vim, для этого вам понадобится компилятор. Имеет ли это смысл?

3. Спасибо за ваш ответ! Я понимаю, что VIM может быть сложно определить это автоматически, но каким-то образом ему удается правильно вычислить выражение, если я делаю [i. В любом случае, поскольку целью является удобочитаемость кода, я был бы не против даже сообщить VIM значения определений вручную или даже раскрасить определенные блоки цветами комментариев

Ответ №3:

Я нашел решение, которое работает для меня. Он не окрашивает код в цвета комментариев, но скрывает его. Если я наведу курсор на AAA в строке #ifdef AAA и наберу [i , VIM сможет показать мне определение AAA. Затем я смотрю на определение и решаю, должен ли отображаться этот блок кода или нет, и сворачиваю его с помощью zf% ( zf if fold, и % указывает сворачивать до конца блока)