Что на самом деле делает «плагин типа файла»?

11

Я понимаю, что он загружает ftplugin.vimфайл, но что он действительно делает? Устанавливает ли он параметры (в зависимости от типа файла)?

Если бы я включил эту строку в начале моего vimrc

filetype plugin indent on

и затем я задаю некоторые параметры после этой строки (например, autoindent, smartindent и т. д.), будет ли с ними связываться? Как я могу узнать, на какие параметры влияет плагин типа файла или файл отступа?

градиент
источник

Ответы:

7

На самом деле есть хорошее описание в help filetype.

Любые параметры, определенные для типа файла, будут установлены с помощью setlocal:

:setl[ocal] ...     Like ":set" but set only the value local to the
                    current buffer or window.  Not all options have [..]

Например /usr/share/vim/vim80/ftplugin/javascript.vimопределяет:

setlocal commentstring=//%s

Поскольку локальные параметры имеют приоритет над глобальными, ваши .vimrcнастройки могут быть проигнорированы. В этом случае вам нужно создать файл ~/.vim/after/ftplugin/javascript.vim(с именем типа файла, который вы хотите изменить) и установить там свои собственные setlocalпараметры.

Самый простой способ узнать , какие параметры установлены, чтобы просто открыть файлы для типов файлов в /usr/share/vim/vim80/ftplugin, ../indentи ../syntax.

laktak
источник
1
E492: Не команда редактора: плагин включен [то же самое для отступа]
Тони
Последнее предложение этого ответа неверно. filetype plugin onи filetype indent onдействительно являются отдельными командами, но обе могут быть объединены для получения filetype plugin indent on.
Руслан
@ Руслан спасибо, я удалил это предложение.
laktak
2

Он определяет автокоманды, которые будут выполняться при открытии файла, соответствующего заданному шаблону. Эти автокоманды sourceв свою очередь Filetype плагин s , связанный с типом файла признанной.

В этих сценариях плагинов для файловых типов вы сможете найти / написать все, что можете добавить в сценарий vim. Хорошей практикой является не определение глобальных вещей, а исключительно локальных. то есть:

  • местные варианты с :setlocal opt=value
  • локальные сопоставления с :[cnivsxot](nore)map <buffer> ...
  • местные сокращения с :iab-<buffer> ...& co
  • местные команды с :command -b ...
  • локальные переменные с :let b:var = 42

относительно

  • меню, вы должны будете использовать плагины, которые имитируют локальные меню, посмотрите плагин Майкла Геддеса или мой модернизированный форк ;
  • функции, вы можете поместить их в ftplugins, но они лучше всего определены в плагинах автозагрузки.
Люк Эрмитт
источник