Як коротко працює підсвічування синтаксису:
У 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
Обидва способи фактично однакові. Використовуйте те, що вам зручніше.