Rozszerzyć podświetlanie składni vima tylko dla * niektórych * plików?

1

Nasze oprogramowanie ma wiele plików konfiguracyjnych .xml. Vim koloruje te pliki, używając np /usr/share/vim/vim74/syntax/xml.vim. Ale czy możemy dostosować kolorystykę tylko dla tych plików, a nie dla wszystkich plików .xml?

(Przykładem takiego dostosowywania może być kolorowanie tekstu między tagami <schmoo>i </schmoo>. Ale to pytanie nie dotyczy sposobu kolorowania, ani XML. Mam nadzieję na odpowiedź, która równie dobrze pasuje do Pythona, YAML lub setek innych formatów .)

Czy inny plik w katalogu plików .xml może przesłonić lub rozszerzyć syntax/xml.vim? (Nieprawdopodobne: runtimepath nie wspomina katalog bieżący, ani zrobić autochdirlub getcwd()wydają się pomóc).

Co powiesz na coś w zmiennej środowiskowej lub w samym pliku .xml (u góry lub u dołu; lub w tekście jak jsbegin / jsend w niestandardowym podświetlaniu składni Vima, dołącz inną składnię języka w określonym zakresie )?

Czy rozszerzenia muszą przejść do każdego użytkownika ~/.vim/after/syntax/xml.vim(który jest używany dla wszystkich plików .xml)? Byłoby to nieoptymalne, ale dopuszczalne dla rozszerzeń wystarczająco wyspecjalizowanych, aby nie kolidowały z innymi rzeczami (np. „Schmoo” powyżej).

Powiązane: Jak skonfigurować podświetlanie składni dla niestandardowego języka w vimie?

Odniesienie: http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-files

Camille Goudeseune
źródło

Odpowiedzi:

2

Upewnij się, że vim modelinejest włączony. :set modeline?powinien odpowiedzieć modelinezamiast nomodeline. Jeśli to konieczne, ustaw go w swoim vimrc. (Obawy dotyczące bezpieczeństwa są już prawie przestarzałe).

W konkretnym pliku .xml dołącz ten wiersz: // vim: filetype=xmlWithSchmoos(Jeśli nie xml, zamień na //cokolwiek, co rozpoczyna komentarz w tym języku).

Utwórz ~/.vim/syntax/xmlWithSchmoos.vimlub /usr/share/vim/vim74/syntax/xmlWithSchmoos.vimzawierający pojedynczy wiersz :so $VIMRUNTIME/syntax/xml.vim.

Dołącz zwrotki do xmlWithSchmoos.vim. Na przykład do czerwonych schmootagów i między nimi, dołącz:

:syntax region xyzzy start=/<schmoo>/ end=/<\/schmoo>/
:highlight xyzzy ctermfg=red guifg=red

Oczywiście, zmiana nazwy na coś sensownego placeholder'y schmoo, xml, xmlWithSchmoos, i xyzzy.

Camille Goudeseune
źródło