Всем привет, с вами еженедельная рубрика "Секреты Вим". Сегодня обсудим такую удобную вещь, как подсветку синтаксиса.
Язык программирования или язык разметки всегда содержит ключевые слова или конструкции, которые полезно выделять цветом и шрифтом: жирным, курсивным, подчркнутым --- на что способен терминал (цвет-то всегда есть в наше время; с остальным по-всякому бывает).
В папке $VIMRUNTIME/syntax лежит (у меня) почти 600 файлов для самых разных языков, файлов настройки и прочих файлов в текстовой форме. Если файла нет, как, например, для языка ncl (NCAR command language, язык для рисования карт, который прекратили развивать, перенеся библиотеки на Питон), то можно скачать файл для него.
Вим умеет определять тип файла, по расширению, но может и заглянуть вовнутрь. Ошибается редко, хотя, конечно, ошибки не исключены. Посмотреть, как и какие файлы распознаются, можно в скрипте $VIMRUNTIME/filetype.vim
Если файл распознается и для него есть скрипт с описанием синтаксиса, то syntax on --- и наслаждайтесь! Раскраска может зависеть от выбранной цветовой схемы (colorscheme).
Но можно и без затей вызвать скрипт, который загрузит синтаксические правила; особенно, если скрипт самодельный. Это делается командой source, сокращенно so: so mysyntax.vim
Теперь давайте посмотрим, как создавать синтаксические описания. Конечно, описать язык непросто, а вот вставить в описание свои пять копеек --- полезно. Я вот добавил к ключевым словами Фортрана private и public ещё слово protected, которое почему-то отсутствовало.
Посмотрим на примере простенького файла, который я себе сделал и пользуюсь. У меня есть файл todo, в который я записываю текущие и запланированные дела. Чтобы выделить цветом важное, срочное, отложенное и "под вопросом", я и сделал такой файлик, todo.vim, и запускаю его вручную.
syntax clear --- сбрасывает действующие правила. Не нужен, если вы хотите что-то добавить, но желателен, если вы хотите свою раскраску.
syntax case ignore --- если ваш язык (или что у вас) регистронезависим. Если зависим, то syntax case match.
Можно задать ключевые слова: syntax keyword TYPE int double char byte
Здесь verbs --- это группа ключевых слов (типы), это могут быть операторы, функции, декларации переменных, определения классов или все, что угодно, выделенное одинаково цветом. Далее идут эти ключевые слова. Далее можно привязать группу к стандартной группе, которая раскрашивается согласно выбранной цветовой схеме. Например, syntax link TYPE Type --- мы привязали нашу группу TYPE к стандартной группе Type. Стандартные группы описаны в документации Вим.
Однако мне нужно было другое. Любые слова, помеченные как-либо, должны выделяться. Для этого служит конструкция syntax match, например
syntax match xImportant /\w\+!/
Здесь я определяю выделяемый фрагмент под названием xImportant регулярным выражением, которое означает "слово с воклицательным знаком". Это важное для меня и будет выделено красным.
Для задания правила (выделить красным) используется команда highlight:
highlight xImportant ctermfg=1
Ключ ctermfg задает цвет шрифта (foreground) кодом (1 --- красный). Есть еще ctermbg --- это цвет фона.
Цвета могут различаться в зависимости от терминала. Пробуйте, читайте доку: help highlight.
Можно определить область: syntax region COMMENT start=/<</ end=/>>/
Здесь мы определили область COMMENT как все между << и >>.
Надеюсь, я зажег ваш интерес! help в помощь.