запись в .vimrc разрушает патоген?

У меня установлен патоген в моей установке vim и установлены различные плагины.

"Call pathogen to set up various plugins
"filetype off
call pathogen#infect()
call pathogen#incubate()
call pathogen#helptags()

Когда я пишу свой .vimrc в vim, следующая команда должна перезагрузить файл (и, похоже, она работает).

" Source the vimrc file after saving it
if has("autocmd")
  autocmd bufwritepost .vimrc source $MYVIMRC
endif

Однако после записи .vimrc pathogen не перезагружается.

Вот вывод :set rtp? после запуска vim:

runtimepath=~/.vim,~/.vim/bundle/Jellybeans,~/.vim/bundle/TwitVim,~/.vim/bundl
e/badwolf,~/.vim/bundle/calendar,~/.vim/bundle/tagbar,~/.vim/bundle/vim-airline,
~/.vim/bundle/vim-colors-solarized,~/.vim/bundle/vim-colorschemes,~/.vim/bundle/
vizardry,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/s
hare/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after 

и после :w в .vimrc возвращается значение по умолчанию.

 runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/
vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

Я попытался добавить следующую модификацию безрезультатно...

if has("autocmd")
    autocmd bufwritepost .vimrc source $MYVIMRC
    autocmd bufwritepost .vimrc call pathogen#incubate()
endif

Я искал вокруг и не мог найти решения, кроме как просто перезапускать vim каждый раз, когда я изменяю свой .vimrc, что довольно разрушительно. Любая помощь будет оценена по достоинству.

редактировать: вывод дерева -d -L 2...

.
├── autoload
└── bundle
    ├── badwolf
    ├── calendar
    ├── color~
    ├── Jellybeans
    ├── tagbar
    ├── TwitVim
    ├── vim-airline
    ├── vim-colorschemes
    ├── vim-colors-solarized
    └── vizardry

person thoss    schedule 18.02.2014    source источник
comment
Почему вы звоните pathogen#incubate()? Он вызывается pathogen#infect(), поэтому нет причин его включать. Также я не могу воспроизвести это из фрагментов кода, которые вы опубликовали.   -  person FDinoff    schedule 19.02.2014
comment
Также не забудьте поместить свои автокоманды в группы stackoverflow.com/questions/18024842/   -  person FDinoff    schedule 19.02.2014
comment
Я добавил pathogen#incubate некоторое время назад после того, как меня подсказала программа, я полагаю, и когда я диагностировал проблему, я думаю, что пробовал разные комбинации выполнения pathogen#infect(), вызова pathogen#infect() и вызова pathogen#. incubate()... Некоторое время я просто думал, что pathogen#infect() не работает. Однако, похоже, это работает, пока я не напишу свой .vimrc.   -  person thoss    schedule 19.02.2014
comment
Что касается autocmd, я обращусь к этому, но сохранение моего .vimrc не похоже на сброс rtp, верно? Я могу выложить весь файл на pastebin. Это немного мешанина, так как я новичок в vim. pastebin.com/YUU0HyVu   -  person thoss    schedule 19.02.2014
comment
Хорошо, я сделал очевидное. Комментирование autocmd bufwritepost .vimrc source $MYVIMRC, похоже, устраняет проблему. Однако мне понравилась эта функция, так как я часто обнаруживаю новые функции и очень часто изменяю .vimrc, поэтому любая помощь в реализации этого без нарушения патогена была бы приятной.   -  person thoss    schedule 19.02.2014


Ответы (1)


Проблема может заключаться в следующих строках на вашем .vimrc:

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
runtime! debian.vim

На $VIMRUNTIME/debian.vim есть строка, которая сбрасывает путь выполнения:

" Debian system-wide default configuration Vim

set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

Проблема не возникает, когда .vimrc загружается при запуске, потому что эти строки выполняются до call pathogen#infect(). Когда вы перезагружаете свой .vimrc, вы перезаписываете свой &rtp, но pathogen не устанавливает его снова (возможно, потому что s:done_bundles уже установлен).

person mMontu    schedule 19.02.2014
comment
Следующий код исправляет это: if (exists("g:loaded_pathogen")==0) runtime! debian.vim endif - person thoss; 20.02.2014
comment
@thoss !exists() — это идиома, которую легче понять по сравнению с exists() == 0, но, конечно, они достигают того же результата. - person mMontu; 20.02.2014
comment
Да, я понял, что вскоре после публикации - я опечатался в команде !exists и подумал, что синтаксис не работает в vim. - person thoss; 21.02.2014