#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, и %
указывает сворачивать до конца блока)