Próbuję naprawić podświetlanie składni dla Pythona; moje kolory różnią się od tych na zrzutach ekranu, jak to „powinno” wyglądać w różnych schematach kolorów vim. Możesz zobaczyć różnicę w porównaniu .rb (który wyświetla się poprawnie) do .py, który wygląda na wyłączony:
Na przykład zauważ, że self
nie jest podświetlone. (To jest w bazie16, ale porównanie byłoby podobne w innych schematach kolorów). Zasadniczo wygląda na to, że podświetlanie składni obiektu jest nieprawidłowe.
Niektóre rzeczy próbowałem:
- Patrząc na skrypty składniowe vim ładuje; jedyną różnicą między .py i .rb w poniższym przykładzie jest to, że Ruby oczywiście pobiera wcięcia / ruby.vim i składnię / ruby.vim, podczas gdy python dostaje wcięcia / python.vim i składnię / python.vim. Są to pliki, które pochodzą z homebrew vim.
- Ładowanie tych samych plików w macvimie zamiast vim terminalu (iterm2); ten sam problem, pliki wyglądają dokładnie tak samo jak na zdjęciu.
- Dodanie nowego pliku python.vim . Nie rozwiązuje problemu, nawet jeśli jest używany jako
.vim/after
skrypt.
Wszelkie sugestie są mile widziane; Waliłam się w to od wielu godzin i nie mogę zrozumieć, dlaczego podświetlenie nie działa zgodnie z oczekiwaniami.
syntax-highlighting
filetype-python
sl8r000
źródło
źródło
Odpowiedzi:
Jak w skrócie działa podświetlanie składni:
W
syntax/<filetype>.vim
składni reguły są definiowane za pomocą:syntax
polecenia. To polecenie definiuje składnię. Mówi „jeśli tekst pasuje do tego wyrażenia regularnego, jest łańcuchem” i tak dalej. W tym celu przypisuje grupę wyróżnień . To nie nie mówią nic na temat kolorów jako takich.:highlight
mówi „podkreśl tę grupę za pomocą tych kolorów”. Odbywa się to w schemacie kolorów , a nie w pliku składni. Istnieje kilka standardowych grup świecące (String
,Function
,Special
, i tak dalej), które wszystkie systemy kolor powinien zdefiniować.W żadnym wypadku nie jesteś ograniczony do tych grup domyślnych i możesz utworzyć tyle grup, ile chcesz (ale domyślnie pliki składni zwykle nie).
indent/<filetype>.vim
Plik kontroluje automatyczne wcięcia. Na przykład dla Ruby jest napisane: „linia podef
powinna zwiększyć poziom wcięcia” i „linia poend
powinna zmniejszyć wcięcie o jeden poziom”. Nie robi nic z kolorami ani podświetlaniem składni.Dlaczego różne języki programowania są wyróżniane? Częściowo z powodu osobistej estetyki i opinii tego, kto to napisał. Na przykład w Ruby
Type
grupa wyróżnień jest używana do nazw klas. Ale mogło to byćFunction
lub coś innego. Dlaczego jest toType
? Prawdopodobnie dlatego, że autor pomyślał, że lepiej wygląda w swojej kolorystyce.Co ważniejsze, języki mają różną semantykę i wrażliwość. W Ruby
self
jest specjalnym słowem kluczowym. Nie możesz zrobićself = "foo"
lubdef self()
. To są błędy. Ale to nie przypadek w Pythonie. To po prostu inna zmienna bez żadnych specjalnych właściwości. Robić:jest naprawdę „przetłumaczony” przez Python na:
Nazwa
self
jest tylko konwencją (prawie powszechnie przyjętą), ale możesz nazwać ją jak tylko chcesz;def x(this):
lubdef x(xxx):
są równie ważne. Możesz także użyć nazwy wself
dowolnym miejscu;self = 'foo'
idef self():
są całkowicie w porządku.Twierdziłbym, że
self
nie należy go wyróżniać, ponieważ nie jest to ani specjalne słowo kluczowe, ani predefiniowana zmienna (jakstr
). Wself
pliku składni nie ma śladu tego słowa , więc wygląda na to, że autor tego rozumował tak samo :-)Jeśli chcesz
self
wyróżnić, musisz utworzyć dla niego regułę składni:Nazwa
pythonBuiltin
grupy jest już zdefiniowana w domyślnym pliku składni i połączona zFunction
grupą wyróżnień. Aby użyć nowej grupy wyróżnień, użyj czegoś takiego:Aby wprowadzić te zmiany, nie możesz ich po prostu włożyć do pliku vimrc. Plik składni zastąpi go. Zamiast tego musisz uruchomić go po załadowaniu pliku składni, co możesz zrobić na dwa sposoby:
Użyj
FileType
autocmd:Użyj
after-directory
,~/.vim/after/syntax/python.vim
:Obie metody są faktycznie takie same. Użyj tego, co wolisz.
źródło