Как работает подсветка синтаксиса вкратце:
В syntax/<filetype>.vimсинтаксисе правила определяются с помощью :syntaxкоманды. Эта команда определяет, ну, синтаксис. Он говорит: «Если текст соответствует этому регулярному выражению, это строка» и так далее. Для этого он назначает группу подсветки . Это ничего не говорит о цветах как таковых.
:highlightговорит "выделите эту группу этими цветами". Это делается в цветовой схеме , а не в файле синтаксиса. Есть куча групп по умолчанию Highlight ( String, Function, Specialи так далее) , которые должны определить все цветовые схемы.
Вы ни в коем случае не ограничены этими группами по умолчанию, и вы можете создать столько групп, сколько захотите (но файлы синтаксиса по умолчанию обычно этого не делают).
indent/<filetype>.vimФайл управляет автоматическим отступов. Например, для Ruby написано «строка после defдолжна увеличить уровень отступа» и «строка после endдолжна уменьшить уровень отступа на один уровень». Он ничего не делает с цветами или подсветкой синтаксиса.
Почему разные языки программирования выделяются по-разному? Частично из-за личной эстетики и мнений того, кто это написал. Например, в Ruby Typeгруппа подсветки используется для имен классов. Но это также могло быть Functionили что-то еще. Почему это Type? Возможно, потому что автор думал, что это выглядело лучше в его или ее цветовой гамме.
Но что более важно, языки имеют различную семантику и чувствительность. В Ruby selfесть специальное ключевое слово. Вы не можете сделать self = "foo"или def self(). Это ошибки. Но это не так в Python. Это просто другая переменная без каких-либо специальных свойств. Выполнение:
x = Object()
x.foo()
действительно "переведено" Python на:
Object.foo(x)
Название self- это просто соглашение (почти повсеместно принятое), но вы можете назвать его как угодно; def x(this):или def x(xxx):одинаково действительны. Вы также можете использовать имя selfгде угодно; self = 'foo'и def self():прекрасно в порядке.
Я бы сказал, что selfне следует выделять, поскольку это не специальное ключевое слово и не предопределенная переменная (например str). В selfфайле синтаксиса нет никаких следов слова , поэтому, похоже, автор этого рассуждал так же :-)
Если вы хотите selfвыделить, вам нужно создать синтаксическое правило для него:
:syn keyword pythonBuiltin self
Имя pythonBuiltinгруппы уже определено в файле синтаксиса по умолчанию и связано с Functionгруппой выделения. Чтобы использовать новую группу подсветки, используйте что-то вроде:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Чтобы внести эти изменения, вы не можете просто вставить их в файл vimrc. Файл синтаксиса переопределит его. Вместо этого вам нужно будет запустить его после загрузки файла синтаксиса, что можно сделать двумя способами:
Используйте FileTypeautocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Используйте after-directory, ~/.vim/after/syntax/python.vim:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Оба метода практически одинаковы. Используйте то, что вы предпочитаете.