membuat penyorotan sintaksis vim sederhana

25

Saya punya semacam sederhana file database yang hanya terdiri dari entri dalam format berikut

variabel = nilai

saya ingin membuat highlight sintaks vim sederhana untuk itu dan mengaturnya untuk ekstensi file tertentu

misalnya, bagian variabel bisa biru muda, dan nilai bagian merah terang

i googled itu dan menemukan hal-hal seperti $vimruntime\syntax\, syntax set=, syntax match, dan hikata kunci, tapi tidak bisa mengaturnya sendiri akhirnya

jadi saya ingin potongan kode vim yang sangat sederhana yang akan menyadarinya dengan mencocokkan sisi kiri dan kanan dan mewarnai secara terpisah


sumber

Jawaban:

31

Dengan asumsi ekstensi file Anda adalah *.foo...

  1. Buat file dan direktori ini jika tidak ada:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. Masukkan yang berikut ini $HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. Masukkan yang berikut ini $HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. Letakkan baris berikut di bagian paling akhir $HOME/.vimrc(atau setidaknya setelahcolorscheme baris apa pun ):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. Pastikan Anda memiliki baris berikut di suatu tempat di ~/.vimrc:

    syntax on
    
romainl
sumber
Wow, OP mendapat dua solusi yang hampir identik dengan harga satu! Saya suka bagaimana kedua solusi kami sangat mirip, namun berbeda dalam detailnya.
Ingo Karkat
ia bekerja, tetapi sekali lagi saya harus mengetik secara manual ftype=setiap kali dalam vim, tidak ada fdetectdirektori di $vimrnutime(saya di windows, %programfiles(x86)%\vim\vim74\ ), saya membuatnya, tapi tetap tidak bereaksi
Anda perlu syntax ondi vimrc Anda.
romainl
20

Script sintaks

Buat file ~/.vim/syntax/simple.vimdengan konten berikut:

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

Itu cocok dengan tiga elemen sintaks, dan memberikan warna default. Seseorang umumnya tidak mendefinisikan warna eksplisit, melainkan tautan ke grup penyorotan default yang ditentukan oleh skema warna Anda. Anda dapat mendaftar semua melalui :hi. Untuk mengutak-atik, baca :help :syntaxdan :help usr_44.txt, dan lihat skrip sintaksis yang dikirimkan bersama Vim.

Deteksi tipe file

Sejauh ini, Anda harus secara manual :set syntax=simpleuntuk aktif. Untuk melakukan ini secara otomatis, Anda harus mengajarkan Vim tentang tipe file baru Anda .

Buat file ~/.vim/ftdetect/simple.vimdengan konten berikut:

autocmd BufNewFile,BufRead *.simple setf simple

Ini mengasumsikan bahwa file dapat diidentifikasi melalui nama file (cp. :help autocmd-patterns). Anda juga dapat mendeteksi berdasarkan jalur (lokasi file), atau bahkan kontennya. :help new-filetypememiliki detail.

Ingo Karkat
sumber