Vim/Sintaksė

Iš Wikibooks.
< Vim

Nors Vimas palaiko labai daug tekstinių failų formatų kartais vistiek gali prireikti parašyti savo sintaksės failą. Gali būti, kad paprastą sintaksę jūs sugalvojote patys ir jums norisi ją turėti Vime. Labai daug informacijos apie Vimo sintaksę galima rasti surinkus komandą:

:help syntax

O štai čia paprastas sintaksės failo pavyzdys. Tarkime jūs rašotės užduotis į paprastą tekstinį failą (TODO). Nepadarytas užduotis žymite minusu, padarytas - pliusu, abejotinas - klaustuku. Taigi skirtingos būsenos užduotis norite pažymėti skirtinga spalva. Taip pat norite, kad tekstas, kuris nėra pažymėtas kaip užduotis (pliusu, minusu arba klaustuku) ir nėra atitrauktas nuo krašto būtų pažymėtas kaip antraštė. Pvz.:

VIM knyga
+ Instaliavimas
+ Konfigūracija
- Sintaksė

Kita
- Sujungti visus straipsnius apie buto pirkimą į vieną straipsnį
? Išsimiegoti
    Jau nepamenu, kada normaliai miegojau

Taigi norime, kad mūsų TODO sąrašas atrodytų gražiai. Tam sukuriame tokį Vimo sintaksės failą:

" Vim syntax file
" Language: TODO
" Maintainer:       Dalius Dobravolskas
"
"
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

syn match   todoNotStarted  "^\ *-.*$"
syn match   todoFinished    "^\ *+.*$"
syn match   todoQuestion    "^\ *?.*$"
syn match   todoTitle       "^[^-+?\ ].*$"

if version >= 508 || !exists("did_todo_syn_inits")
  if version <= 508
    let did_todo_syn_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  " The default methods for highlighting.  Can be overridden later

  hi TodoFinishedSyntax         guifg=#008000 gui=bold
  hi TodoNotStartedSyntax       guifg=#FF0000
  hi TodoQuestionSyntax         guifg=#0000FF
  hi TodoTitleSyntax            gui=bold

  HiLink todoNotStarted         TodoNotStartedSyntax
  HiLink todoFinished           TodoFinishedSyntax
  HiLink todoQuestion           TodoQuestionSyntax
  HiLink todoTitle              TodoTitleSyntax

  delcommand HiLink
endif

let b:current_syntax = "todo"

Jį pavadiname todo.vim ir nukopijuojame į ~/.vim/syntax (gali tekti sukurti failą tokiu pavadinimu). Taip pat mes tikriausiai norėsime, kad ši sintaksė automatiškai būtų taikoma failams su plėtiniu todo (*.todo) arba tiems, kurie vadinasi todo.txt (čia jau jums improvizuoti). Tam reikia į .vimrc failą įdėti tokias eilutes:

au BufRead,BufNewFile *.todo        set filetype=todo
au BufRead,BufNewFile todo.txt      set filetype=todo

Štai taip aukščiau aprašytas failas atrodo mano kompiuteryje: