Как мне узнать, какой файл синтаксиса используется?

50

Vim - это синтаксическая подсветка моего файла забавным способом, и я хочу знать, какой синтаксический файл отвечает за это поведение. Как узнать, какие файлы синтаксиса загружены vim?

Эдвард З. Ян
источник

Ответы:

39

Чтобы узнать, какие файлы Vim действительно загрузили, выполните

:scriptnames
garyjohn
источник
Это полезно Теперь вот в чем я не уверен: если файл синтаксиса появляется в этом списке, гарантируется ли, что файл синтаксиса "активен"? Я могу видеть довольно много файлов синтаксиса здесь.
Эдвард З. Ян
7
Как правило, только последний из перечисленных является «активным», и даже не может быть, если вы выключили подсветку синтаксиса. Чтобы увидеть синтаксис, действующий в данный момент, выполните :echo b:current_syntax. Чтобы увидеть элементы синтаксиса, действующие в настоящее время, выполните действия, предложенные Ingo, и выполните их :syntax list. Последнее может помочь, если элементы синтаксиса из более чем одного файла синтаксиса действуют, как отметил Инго.
garyjohn
1
На Mac OS XI модифицировал /usr/share/vim/vim73/filetype.vim. После использования вышеуказанной команды я понял, что она использует версию MacVim в ~/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim. Если у вас установлен MacVim, убедитесь, что вы изменили правильный файл.
echamber
1
Вы можете загрузить два файла синтаксиса с одинаковыми именами. Например, vim поставляется с подсветкой синтаксиса для ColdFusion ( /usr/share/vim/vim81/syntax/cf.vimдля меня). Я установил пользовательский cf.vim, потому что стандартный датирован. :scriptnamesпоказывает оба файла. Значение по умолчанию ниже в списке скриптов; Тем не менее, первый используется. Если вы посмотрите /usr/share/vim/vim81/syntax/cf.vim, есть охранник if exists("b:current_syntax") finish endif. Так что в моем случае это scriptnamesбыло полезно, но мне пришлось копать немного глубже.
Аведжида
31

Синтаксис для текущего буфера может быть запрошен через

:setlocal syntax?

Обычно (но не обязательно) соответствует filetype буфера ( :setlocal filetype?).

Для более глубокого взгляда,

:syntax list

показывает все определения синтаксиса (некоторые синтаксисы (могут) включают синтаксисы других языков, например java, htmlдля разметки комментариев JavaDoc).

Инго Каркат
источник
Это то, что я искал, основываясь на названии вопроса ОП. OP, конечно, разъясняет в описании, что он ищет фактический файл синтаксиса, но я благодарен вам за то, что вы оставили это здесь, так как это один из первых ответов в поисковых системах.
verboze
4

Вы можете просмотреть, какие типы файлов в настоящее время используются и

:verbose set ft ?

Плагин, обрабатывающий тип файла, скорее всего находится в

:e $VIMRUNTIME\ftplugin
Ливен Керсмакерс
источник