tworząc proste podświetlanie składni vima

25

Mam prosty rodzaj pliku bazy danych, który składa się tylko z wpisów w następującym formacie

zmienna = wartość

Chcę utworzyć proste podświetlanie składni vim i ustawić dla określonego rozszerzenia pliku

na przykład część zmienna może być jasnoniebieska, a część wartości jasnoczerwona

I googled go i natknąłem się na rzeczy, takich jak $vimruntime\syntax\, syntax set=, syntax matchi hisłów kluczowych, ale nie mógł ustawić go sobie w końcu

więc chcę bardzo prostego fragmentu kodu vim, który zrealizowałby to, dopasowując lewą i prawą stronę i kolorując je osobno


źródło

Odpowiedzi:

31

Zakładając, że rozszerzenie pliku to *.foo

  1. Utwórz te pliki i katalogi, jeśli nie istnieją:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. Wprowadź następujące dane $HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. Wprowadź następujące dane $HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. Umieść następujące linie na samym końcu $HOME/.vimrc(lub przynajmniej po dowolnej colorschemelinii):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. Upewnij się, że masz gdzieś w swoim wierszu następujący wiersz ~/.vimrc:

    syntax on
    
romainl
źródło
Wow, OP ma dwa prawie identyczne rozwiązania w cenie jednego! Podoba mi się to, że oba nasze rozwiązania są bardzo podobne, ale różnią się szczegółami.
Ingo Karkat
to działa, ale znowu muszę ręcznie pisać ftype=za każdym razem w vimie, nie było fdetectkatalogu $vimrnutime(jestem w %programfiles(x86)%\vim\vim74\
Potrzebujesz syntax onw swoim vimrc.
romainl
20

Skrypt składniowy

Utwórz plik ~/.vim/syntax/simple.vimo następującej treści:

" 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'

Odpowiada trzem elementom składni i zapewnia domyślne kolory. Zasadniczo nie definiuje się wyraźnych kolorów, ale zamiast tego prowadzi się do domyślnych grup podświetlania zdefiniowanych przez twój schemat kolorów. Możesz wymienić wszystkie za pośrednictwem :hi. Aby poprawić, przeczytaj :help :syntaxi :help usr_44.txtspójrz na skrypty składniowe dostarczane z Vimem.

Wykrywanie rodzaju pliku

Jak dotąd musisz ręcznie :set syntax=simpleaktywować. Aby to zrobić automatycznie, musisz nauczyć Vima nowego typu pliku .

Utwórz plik ~/.vim/ftdetect/simple.vimo następującej treści:

autocmd BufNewFile,BufRead *.simple setf simple

Zakłada się, że pliki można zidentyfikować za pomocą nazwy pliku (cp. :help autocmd-patterns). Możesz także wykryć na podstawie ścieżki (lokalizacji pliku), a nawet zawartości. :help new-filetypema szczegóły.

Ingo Karkat
źródło