2013-06-15 3 views
2

Я пытался установить autoclose.vim в Vim. Я заметил, что у меня не было папки ~/.vim/plugin, поэтому я случайно сделал папку ~/.vim/plugins (обратите внимание на дополнительные 's' в плагинах). Затем я добавил au FileType python set rtp += ~/.vim/plugins в мой .vimrc, потому что из того, что я прочитал, это позволит мне автоматически генерировать сценарии в этой папке.Плагины Vim не всегда загружаются?

Плагин не загружался для меня, пока я не осознал свою ошибку и не извлек лишние 'из' плагинов '. Я смущен, потому что этот новый путь даже не определен в моем пути выполнения. Я в основном задаюсь вопросом, почему плагин загружен, когда у меня его было в ~/.vim/plugin, но не в ~/.vim/plugins?

+1

Я уверен, что это просто потому, что '~/.vim/plugin' предопределен, тогда как' ~/.vim/plugins' не является. – Rubens

+0

Да, это было мое предположение. Однако, скажем, я хочу иметь пользовательский каталог для хранения моих плагинов, как я могу это сделать? – Fumbster

ответ

4

:help load-plugins описывает, как загружаются плагины.

Недостаточно добавить папку в ваш rtp; он должен иметь подкаталог plugin. Например, с учетом :set rtp+=/tmp/foo, файл /tmp/foo/plugin/bar.vim будет обнаружен и загружен, но ни /tmp/foo/plugins/bar.vim, ни /tmp/foo/bar.vim не будет.

+0

безупречный, спасибо. Как-то я, должно быть, пропустил это. – Fumbster

2

Вы на правильном пути с set rtp+=..., но есть немного больше к нему (rtp нерекурсивна, помогают индексации, многие частные случаи), чем кажется на первый взгляд, так что это не очень хорошая идея, чтобы сделать это сам. Если вы не готовы к месячному снижению производительности.

Если вы хотите сохранить все свои плагины в специальном каталоге, вы должны использовать правильное решение runtimepath/plugin-management. Я предлагаю Pathogen (rtp -manager) или Vundle (плагин-менеджер), но есть и многие другие.

0

Все папки в опции rtp (runtimepath) должны иметь такую ​​же структуру папок, как ваш $VIMRUNTIME ($VIMRUNTIME обычно /usr/share/vim/vim{version}). Таким образом, он должен иметь одинаковые имена подкаталогов, например. autoload, doc, plugin (в зависимости от того, что вам нужно, но с теми же именами). Плагины должны находиться в соответствующем подкаталоге.

Допустим, у вас есть /path/to/dir (в вашем случае это ~/.vim) в вашем rtp, vim будет

  • ищут глобальные плагин в /path/to/dir/plugin
  • ищут плагин типов файлов в /path/to/dir/ftplugin
  • взгляда для файлов синтаксиса в /path/to/dir/syntax
  • искать файлы справки в /path/to/dir/doc

и так далее ...

vim смотрит только на пару признанных подкаталогов & кинжала; в /path/to/dir. Если у вас есть неизвестное имя подкаталога (например, /path/to/dir/plugins), vim не увидит его.

& dagger; "узнано" здесь означает, что подкатегорию с таким же именем можно найти в /usr/share/vim/vim{version} или где у вас есть vim.

+1

Спасибо за это. Это помогло мне понять путь времени выполнения намного яснее. Ты прав; как оказалось, я использовал 'plugins' вместо' plugin', который не является папкой, распознанной Vim. – Fumbster

2

В дополнение к @Nikita Kouevda ответ: изменение rtp на FileType случае может быть слишком поздно для ВИМ, чтобы загрузить все плагины из модифицированного runtimepath: если это событие было начато после того, как был получен vimrc это не гарантируется плагинов от нового дополнения будет загружаться; если это событие было запущено после VimEnter событий, то гарантировано, что плагины с нового добавления будут не быть отправлен автоматически.

Если вы хотите источник AutoClose только при редактировании питона файлов вы должны использовать :au FileType python :source ~/.vim/macros/autoclose.vim (примечание: macros или любой другой подкаталог, кроме plugin и каталогов, найденных в $VIMRUNTIME или даже любой каталог не найден в runtimepath вообще).

Если вы хотите, чтобы использовали, автоклинируйте только при редактировании файлов python, вы должны проверить источник и документацию плагина, там должна быть поддержка со стороны плагина, чтобы она работала.

// Или, если AutoClose не поддерживает это, используйте :au FileType команду выше пункта, но предварять source с чем-то, что записывает ВИМ состояния (команды, отображения и автокоманды), Append же после source, выяснить различия в состоянии и удалите различия на каждом :au BufEnter, если filetype не является python и восстанавливает их иначе: взломанный и может вводить странные ошибки. Пример кода регистрации состояний и определения различий может быть найден here.

+1

Простейший метод, который я нашел для загрузки плагинов, специфичных для языка, заключался в том, чтобы бросить их в папку '.vim/ftplugin'. Поэтому, если бы я хотел использовать только autoclose, я бы поместил его в 'ftplugin/python'. Я тестировал его, и он работал только для типов файлов python. Вы также должны иметь 'filetype plugin on' в вашем .vimrc. Для любых глобальных плагинов я помещаю их в папку '.vim/plugin'. – Fumbster

+0

@Fumbster Это точно такое же решение, как и с ': au FileType'. Он будет * source * плагинами при редактировании файлов python, но, будучи глобальным плагином, когда вы его используете, вы * включите его * для всех последующих файлов, которые вы редактируете. Я настоятельно рекомендую не использовать «ftplugin/python» для таких плагинов, потому что это нарушение семантики: плагины, определяющие глобальные сопоставления, являются ** не ** плагинами типов файлов и после их включения они будут работать для любых впоследствии загруженных файлов, поэтому они семантически принадлежат к тем же как 'matchit.vim' (неавторизованные глобальные плагины). – ZyX

+0

@Fumbster * Я, конечно, имел в виду «все последующие файлы, которые вы редактируете *, в той же сессии vim *.» – ZyX

Смежные вопросы