Yerel vimrc'ime nasıl ek sözdizimi vurgulama kuralları ekleyebilirim?


12

Hem Fedora hem de Win7'ye gvim yükledim. Win7'deki gvim bunu vurgularken, vora ve gvim'in Fedora'daki işlev adını c kodunda vurgulamadığını buldum.

Win7'de vim73/syntax/c.vimsonunda ek satırlar olduğunu buldum :

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

Bu satırları c.vimFedora'ya eklersem gvim işlev adını da vurgulayabilir.

Taşınabilirliği korumak için .vimrcişlev adını vurgulamak üzere sadece değiştirmek istiyorum . Ancak, bu satırları ekledikten sonra .vimrcişe yaramadı.

Peki, biri bana yardım edebilir mi? Bir arama yaptım ve vim'deki işlev adlarını vurgulamak için birçok çözüm var. Ama ben sadece bu çizgilerin nasıl çalışacağını merak ediyorum .vimrc. Çok teşekkürler!


5
~/.vim/after/syntax/c.vimBunun yerine eklemeyi deneyin .
muru

@muru Evet, işe yarıyor. Ama eklemeye ne dersiniz .vimrc?
tamlok

Muhtemelen böyle bir şey kullanmak zorunda autocmd BufEnter *.c hl ...kalacaksınız, ama onu içinde tutmalısınız after/syntax/c.vim. Vim'in herhangi modern bir versiyonu .vim/after/dizini anlayacaktır . Windows'da yol olurdu vimfiles/after/..., bu nedenle taşınabilirlik çok fazla sorun olmamalıdır (özellikle herhangi bir eklenti kullanıyorsanız).
muru

Yanıtlar:


15

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=foove kullandığınız set syntax=barbir arabellek varsa, hem foo ve hem de sözdizimi vurgulaması olan bir arabellek ile sonuçlanır bar.

Vim başladığında bir vimrckez (başlangıçta) yükler, ancak filetypeveya syntaxseç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

SyntaxAutocmd'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ü :synkomutun bir parçası olarak yorumlanma eğilimindedirler , bu yüzden autocmd Syntax cbirkaç 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>.vimbulunduğu yere sahip olduktan sonra yüklenecektir . Örneğinizde olması gerekir .<file.vim>$VIMRUNTIMEsyntax/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 ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.