Как работает подсветка синтаксиса вкратце:
В 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. Файл синтаксиса переопределит его. Вместо этого вам нужно будет запустить его после загрузки файла синтаксиса, что можно сделать двумя способами:
Используйте FileType
autocmd:
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
Оба метода практически одинаковы. Используйте то, что вы предпочитаете.