создание простой подсветки синтаксиса vim

25

у меня есть простой вид файла базы данных, который состоит только из записей в следующем формате

переменная = значение

я хочу создать для него простую подсветку синтаксиса vim и установить его для определенного расширения файла

например, переменная часть может быть светло - голубой цвет, а значение часть светло - красный

я гугле его и наткнулся на такие вещи, как $vimruntime\syntax\, syntax set=, syntax matchи hiключевые слова, но не может установить его сам в конце концов ,

поэтому я хочу очень простой фрагмент кода vim, который бы реализовал его, сопоставив левый и правый края и раскрасив их отдельно


источник

Ответы:

31

Предполагая, что расширение вашего файла *.foo...

  1. Создайте эти файлы и каталоги, если они не существуют:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. Поместите следующее в $HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. Поместите следующее в $HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. Поместите следующие строки в самый конец $HOME/.vimrc(или хотя бы после любой colorschemeстроки):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. Убедитесь, что где-то в вашей строке есть следующая строка ~/.vimrc:

    syntax on
    
romainl
источник
Ух ты, ОП получил два практически идентичных решения по цене одного! Мне нравится, что оба наших решения очень похожи, но различны в деталях.
Инго Каркат
это работает, но опять же мне приходится ftype=каждый раз вручную вводить в vim, в нем не было fdetectкаталога $vimrnutime(я на Windows %programfiles(x86)%\vim\vim74\ ), я его создал, но все равно он не реагирует
Вы нуждаетесь syntax onв вашем vimrc.
Ромен
20

Синтаксический скрипт

Создайте файл ~/.vim/syntax/simple.vimсо следующим содержимым:

" Quit when a syntax file was already loaded.
if exists('b:current_syntax') | finish|  endif

syntax match simpleVar "\k\+" nextgroup=simpleAssignment
syntax match simpleAssignment "=" contained nextgroup=simpleValue
syntax match simpleValue ".*" contained

hi def link simpleVar Identifier
hi def link simpleAssignment Statement
hi def link simpleValue String

let b:current_syntax = 'simple'

Это соответствует трем элементам синтаксиса и обеспечивает цвета по умолчанию. Обычно не определяют явные цвета, а вместо этого ссылаются на группы подсветки по умолчанию, определенные вашей схемой цветов . Вы можете перечислить все через :hi. Для настройки читайте :help :syntaxи :help usr_44.txtсмотрите на синтаксические сценарии, которые поставляются с Vim.

Обнаружение типов файлов

Пока что вы должны вручную :set syntax=simpleактивировать. Чтобы сделать это автоматически, вы должны рассказать Vim о вашем новом типе файла .

Создайте файл ~/.vim/ftdetect/simple.vimсо следующим содержимым:

autocmd BufNewFile,BufRead *.simple setf simple

Это предполагает, что файлы могут быть идентифицированы через имя файла (ср. :help autocmd-patterns). Вы также можете обнаружить на основе пути (местоположение файла) или даже содержимого. :help new-filetypeесть детали.

Инго Каркат
источник