Saya menginstal gvim pada Fedora dan Win7. Saya menemukan bahwa baik vim dan gvim pada Fedora tidak menyorot nama fungsi dalam kode c sementara gvim pada win7 memang menyorotnya.
Saya menemukan bahwa pada win7, vim73/syntax/c.vim
memiliki baris tambahan di akhir:
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
Jika saya menambahkan baris-baris ini ke dalam c.vim
pada Fedora, gvim juga dapat menyorot nama fungsi.
Untuk menjaga portabilitas, saya hanya ingin memodifikasi .vimrc
untuk menyorot nama fungsi. Namun setelah menambahkan garis-garis ini ke dalam .vimrc
, itu tidak berhasil.
Jadi, adakah yang bisa membantu saya? Saya melakukan pencarian dan ada banyak solusi untuk menyorot nama fungsi di vim. Tapi saya hanya ingin tahu bagaimana membuat garis-garis ini bekerja .vimrc
. Terima kasih banyak!
sumber
~/.vim/after/syntax/c.vim
sebagai gantinya..vimrc
?autocmd BufEnter *.c hl ...
, tetapi Anda harus menyimpannyaafter/syntax/c.vim
. Setiap versi modern Vim akan memahami.vim/after/
direktori. Pada Windows, jalurnya akan jadivimfiles/after/...
, portabilitas seharusnya tidak menjadi masalah (terutama jika Anda menggunakan plugin apa pun).Jawaban:
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 memilikisyntax=foo
dan menggunakanset syntax=bar
maka Anda akan berakhir dengan buffer yang memiliki penyorotan sintaks untuk keduanyafoo
danbar
.Ketika Vim mulai memuat Anda
vimrc
sekali (saat startup), tetapi memuat filetype dan file sintaks setiap kali opsifiletype
atausyntax
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:
~/.vim/
dengan~/.config/nvim/
.~/.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, seharusnyasyntax/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
autocmdGunakan
Syntax
autocmd:Perhatikan bahwa chaining beberapa perintah dengan
|
bermasalah di sini, karena mereka cenderung ditafsirkan sebagai bagian dari:syn
perintah, itulah sebabnya saya mengulangiautocmd Syntax c
beberapa kali. Alternatifnya adalah menggunakan fungsi: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, seharusnyasyntax/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 ).
sumber