Ancak bu satırları .vimrc'ye ekledikten sonra işe yaramadı.
Bunun nedeni, Vim'in 'syntax'
seçeneği ayarlarken mevcut sözdizimi öğelerini temizlemesidir . Bu, eski sözdizimi öğelerinin tutulması bazı garip durumlara yol açacağı için yapılır; sahip syntax=foo
ve kullandığınız set syntax=bar
bir arabellek varsa, hem foo
ve hem de sözdizimi vurgulaması olan bir arabellek ile sonuçlanır bar
.
Vim başladığında bir vimrc
kez (başlangıçta) yükler, ancak filetype
veya syntax
seçenekleri her ayarlandığında dosya türü ve sözdizimi dosyalarını yükler , bu da vimrc'nizde ayarladığınız değerleri sıfırlar.
Sıfırlamasa bile, sadece arabelleklere değil, tüm tamponlara uygulanacağı için sadece vimrc'nize eklemek iyi bir fikir olmaz syntax=c
.
Aşağıdaki metin, Unix-y sisteminde Vim olduğunu varsayar, ancak Neovim ve Windows kullanıcıları için de çalışır:
- Neovim kullanıcıları
~/.vim/
ile değiştirilmelidir ~/.config/nvim/
.
- Windows kullanıcıları
~/.vim/
ile değiştirilmelidir %USERPROFILE%\vimfiles\
.
Dosyanın tamamını geçersiz kılma
Bir şeyi değiştirmenin en kolay yolu, onu geçersiz kılmaktır . Bunu yapmak için içinde bir dosya oluşturun ~/.vim/<file>.vim
.
<file.vim>
, göreli yoldur $VIMRUNTIME
(alt dizinler dahil). Örneğinizde olması gerekir syntax/c.vim
. İçindeki dosya yerine yüklenecek $VIMRUNTIME
.
Bunun sonucu, değişiklik yapmanın daha kolay olmasıdır - sözdizimi dosyalarından çıkarken değişiklik yapmak bazen biraz zor olabilir. Dezavantajı, sistem çapında dosyada gelecekteki güncellemeleri alamayacağınızdır.
Ben sık sık sözdizimi dosyaları ile deneme için bir başlangıç noktası olarak kullanın ve daha sonra aşağıda açıklanan yöntemlerden birini kullanarak yerel bir ekleme yerel değişiklikleri ayıklamak.
Yerel eklemeler
Sözdizimi dosyalarına yerel eklemeler eklemenin iki yolu vardır, bunlar işlevsel olarak aynıdır ve tercih ettiğiniz yöntemi kullanabilirsiniz.
Syntax
autocmd
Syntax
Autocmd'yi kullanın :
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
Burada birkaç komutun zincirlenmesinin |
sorunlu olduğuna dikkat edin , çünkü :syn
komutun bir parçası olarak yorumlanma eğilimindedirler , bu yüzden autocmd Syntax c
birkaç kez tekrarladım . Alternatif olarak bir işlev kullanmak olabilir:
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
Avantajı, tüm değişikliklerin tek bir dosyada bulunabilmesidir. Dezavantajı, özellikle çok fazla değişiklik varsa, biraz çirkin olmasıdır.
dizinden sonra
Sonrası dizini kullanın: ~/.vim/after/<file>.vim
.
Bu, (alt dizinler dahil) ile ilgili yolun <file>.vim
bulunduğu yere sahip olduktan sonra yüklenecektir . Örneğinizde olması gerekir .<file.vim>
$VIMRUNTIME
syntax/c.vim
Ayrıca bkz :help after-directory
.
Avantajı, özellikle birçok değişikliğiniz varsa, autocmd'den biraz daha okunabilir olmasıdır. Dezavantajı, Vim kurulumunuzu farklı makinelere yansıtmak istiyorsanız ek bir dosyaya kopyalamanız gerekmesidir (bu, birçok kişinin Vim dosyalarını GitHub deposunda tutmasının önemli bir nedenidir, böylece makineler arasında kolayca yansıtılabilir ).
~/.vim/after/syntax/c.vim
Bunun yerine eklemeyi deneyin .