У меня есть файл с именем $HOME/.vim/ftplugin/stylus.vim со следующим содержимым:

setlocal foldmethod=indent
setlocal foldnestmax=1
setlocal foldlevelstart=1
echo 'Stylus file loaded!'

Все, кроме foldmethod , настроено правильно, и "Стилус загружен!""отображается, когда я открываю файл стилуса (просто чтобы подтвердить, что он действительно загружается.)

Но foldmethod установлен на marker . Почему он не устанавливается правильно? Возможно ли, что файл синтаксиса (или аналогичный) переопределяет мои настройки?


Изменить: я просмотрел все файлы в vim-stylus для "foldmethod" и "fdm" и ничего не нашел, так что это определенно не перекрывает мой метод сгибания.

Снова отредактируйте: я только что узнал, что вы можете отследить, где параметр был последний раз изменен, используя :verbose set foldmethod? и я обнаружил, что метод fold установлен в $HOME/.vim/ftplugin/html.vim который выглядит следующим образом:

setlocal foldmethod=marker
setlocal foldmarker=Section:,End\ of\ section

Теперь, с какой стати мой html ftplugin-файл исполняется для моего стилуса ...?

2 ответа2

1

Вы можете определить, какой скрипт в последний раз устанавливал опцию, с помощью команды :verbose . В этом случае:

:verbose set foldmethod?

(со знаком вопроса в составе команды)

Вероятно, вы хотите поместить ваш ftplugin в ~/.vim/after/ftplugin/ вместо ~/.vim/ftplugin/ чтобы он загружался после и переопределял системный ftplugin.

0

Я заметил, что сценарии ftplugin vim для многих языков могут быть выполнены для одного файла. Например, файл haml может иметь встроенный coffeescript, css и т.д., И я предполагаю, что поскольку синтаксис haml для vim включает в себя встраивание этих языков, Vim запускает для них сценарии ftplugin .

По этой причине у меня появилась привычка оборачивать мои файлы ftplugin в такой блок:

if &filetype == 'haml'
  " ...
end

Это гарантирует, что мои настройки применяются только к тем типам файлов, для которых они предназначены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .