Jednak po dodaniu tych linii do .vimrc nie działało.
Powodem tego jest to, że Vim usuwa istniejące elementy składniowe podczas ustawiania 'syntax'
opcji. Dzieje się tak, ponieważ zachowanie starych elementów składni prowadziłoby do dziwnych sytuacji; jeśli masz bufor, który ma syntax=foo
i używa, set syntax=bar
to skończysz na buforze, który ma podświetlanie składni dla obu foo
i bar
.
Kiedy Vim się uruchamia, ładuje twój vimrc
raz (przy uruchomieniu), ale ładuje pliki typu pliku i składni za każdym razem, gdy są ustawione opcje filetype
lub syntax
, co zresetuje wartości ustawione w twoim vimrc.
Nawet gdyby go nie zresetował, nie byłoby dobrym pomysłem dodanie go do vimrc, ponieważ dotyczyłoby wszystkich buforów, a nie tylko buforów z syntax=c
.
Poniższy tekst zakłada Vima w systemie Unix-y, ale będzie on również działał dla użytkowników Neovim i Windows:
- Neovim użytkownicy powinni wymienić
~/.vim/
z ~/.config/nvim/
.
- Okna użytkownicy powinni wymienić
~/.vim/
z %USERPROFILE%\vimfiles\
.
Przesłanianie całego pliku
Najprostszym sposobem na zmianę czegoś jest po prostu zastąpienie go . Aby to zrobić, utwórz plik w ~/.vim/<file>.vim
.
<file.vim>
jest ścieżką względem $VIMRUNTIME
(w tym podkatalogów). W twoim przykładzie powinno być syntax/c.vim
. Zostanie załadowany zamiast pliku w $VIMRUNTIME
.
Skutkiem tego jest łatwiejsze wprowadzanie zmian - zmiana wychodzących plików składniowych może być czasem nieco trudna. Minusem jest to, że nie otrzymasz żadnych przyszłych aktualizacji pliku systemowego.
Często używam tego jako punktu wyjścia do eksperymentowania z plikami składni, a następnie wypakowuję moje lokalne zmiany do lokalnego dodatku, używając jednej z metod opisanych poniżej.
Lokalne dodatki
Istnieją dwa sposoby dodawania lokalnych dodatków do plików składniowych, są one funkcjonalnie identyczne i można użyć preferowanej metody.
Syntax
autocmd
Użyj 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
Zauważ, że łączenie kilku poleceń |
jest tutaj problematyczne, ponieważ mają one tendencję do interpretowania jako części :syn
polecenia, dlatego autocmd Syntax c
kilka razy powtórzyłem . Alternatywą byłoby użycie funkcji:
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
Zaletą jest to, że wszystkie zmiany mogą być zawarte w jednym pliku. Wadą jest to, że jest trochę brzydka, szczególnie jeśli masz wiele zmian.
po katalogu
Użyj Directory po-: ~/.vim/after/<file>.vim
.
Zostanie to załadowane po <file>.vim
has, gdzie <file.vim>
jest ścieżka względem $VIMRUNTIME
(łącznie z podkatalogami). W twoim przykładzie powinno być syntax/c.vim
.
Zobacz także :help after-directory
.
Zaletą jest to, że jest nieco bardziej czytelny niż autocmd, szczególnie jeśli masz wiele zmian. Wadą jest to, że musisz skopiować dodatkowy plik, jeśli chcesz wykonać kopię lustrzaną konfiguracji Vima na różnych komputerach (jest to ważny powód, dla którego wiele osób utrzymuje swoje pliki Vima w repozytorium GitHub, aby można je było łatwo skopiować na różne maszyny ).
~/.vim/after/syntax/c.vim
zamiast tego.