створення простого підкреслення синтаксису 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
    

Ого, ОП отримав два майже однакових рішення за ціну одного! Мені подобається, як обидва наші рішення дуже схожі, але чіткі в деталях.
Інго Каркат

це працює, але знову ж таки мені доведеться вручну вводити ftype=кожен раз у vim, в ньому не було жодного fdetectкаталогу $vimrnutime(я на Windows, %programfiles(x86)%\vim\vim74\ ), я створив його, але все одно він не реагує

Вам потрібно syntax onв своєму vimrc.
romainl

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

Це передбачає, що файли можна ідентифікувати через ім'я файлу (cp. :help autocmd-patterns). Ви також можете виявити на основі шляху (розташування файлу) або навіть вмісту. :help new-filetypeмає деталі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.