Namun setelah menambahkan baris-baris ini ke .vimrc, tidak berfungsi.
Alasan untuk ini adalah bahwa Vim menghapus item sintaks yang ada saat mengatur 'syntax'
opsi. Ini dilakukan karena menyimpan item sintaksis lama akan menyebabkan beberapa situasi aneh; jika Anda memiliki buffer yang memiliki syntax=foo
dan menggunakan set syntax=bar
maka Anda akan berakhir dengan buffer yang memiliki penyorotan sintaks untuk keduanya foo
dan bar
.
Ketika Vim mulai memuat Anda vimrc
sekali (saat startup), tetapi memuat filetype dan file sintaks setiap kali opsi filetype
atau syntax
diatur, yang akan mengatur ulang nilai yang telah Anda atur di vimrc Anda.
Bahkan jika itu tidak mengatur ulang, itu bukan ide yang baik untuk hanya menambahkannya ke vimrc Anda, karena itu akan berlaku untuk semua buffer, dan bukan hanya buffer dengan syntax=c
.
Teks di bawah ini mengasumsikan Vim pada sistem Unix-y, tetapi juga akan berfungsi untuk pengguna Neovim dan Windows:
- Pengguna Neovim harus mengganti
~/.vim/
dengan ~/.config/nvim/
.
- Pengguna Windows harus mengganti
~/.vim/
dengan %USERPROFILE%\vimfiles\
.
Mengganti seluruh file
Cara termudah untuk mengubah sesuatu adalah menimpanya . Untuk melakukannya, buat file di ~/.vim/<file>.vim
.
<file.vim>
adalah jalur relatif ke $VIMRUNTIME
(termasuk subdirektori). Dalam contoh Anda, seharusnya syntax/c.vim
. Ini akan dimuat bukan file di $VIMRUNTIME
.
Hasilnya adalah lebih mudah untuk membuat perubahan - mengubah file sintaks yang keluar kadang-kadang sedikit rumit. Kelemahannya adalah Anda tidak akan mendapatkan pembaruan di masa depan untuk file sistem-lebar.
Saya sering menggunakan ini sebagai titik awal untuk bereksperimen dengan file sintaks, dan kemudian mengekstrak perubahan lokal saya ke penambahan lokal menggunakan salah satu metode yang dijelaskan di bawah ini.
Penambahan lokal
Ada dua cara untuk menambahkan tambahan lokal ke file sintaksis, mereka secara fungsional identik, dan Anda dapat menggunakan metode yang Anda inginkan.
Syntax
autocmd
Gunakan Syntax
autocmd:
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
Perhatikan bahwa chaining beberapa perintah dengan |
bermasalah di sini, karena mereka cenderung ditafsirkan sebagai bagian dari :syn
perintah, itulah sebabnya saya mengulangi autocmd Syntax c
beberapa kali. Alternatifnya adalah menggunakan fungsi:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
Keuntungannya adalah bahwa semua perubahan dapat dimasukkan ke satu file. Kerugiannya adalah itu agak jelek, terutama jika Anda memiliki banyak perubahan.
setelah direktori
Menggunakan direktori setelah-: ~/.vim/after/<file>.vim
.
Ini akan dimuat setelah <file>.vim
has, di mana <file.vim>
path relatif ke $VIMRUNTIME
(termasuk subdirektori). Dalam contoh Anda, seharusnya syntax/c.vim
.
Lihat juga :help after-directory
.
Keuntungannya adalah itu sedikit lebih mudah dibaca daripada autocmd, terutama jika Anda memiliki banyak perubahan. Kerugiannya adalah Anda harus menyalin file tambahan jika Anda ingin mirror setup Vim Anda ke mesin yang berbeda (ini adalah alasan penting banyak orang menyimpan file Vim mereka dalam repo GitHub, sehingga dapat dengan mudah dicerminkan di mesin lain ).
~/.vim/after/syntax/c.vim
sebagai gantinya.