Почему vim читает систему zipPlugin.vim после чтения моего файла .vimrc? - PullRequest
1 голос
/ 01 января 2012

У меня есть строка

set cpoptions+=$

в моем .vimrc файле.Однако согласно

verbose set cpoptions output:

cpoptions=aABceFs
Last set from /usr/share/vim/vim73/plugin/zipPlugin.vim

: он всегда перезаписывается zipPlugin.vim.Мне интересно, почему vim читает эти плагины после чтения моего .vimrc файла?Есть ли способ это исправить?

1 Ответ

3 голосов
/ 01 января 2012

Потому что vim всегда читает vimrc перед плагинами.Эта последовательность загрузки имеет смысл, потому что в этом случае вы можете установить параметры плагина в vimrc.Его нельзя переопределить, но вы можете использовать zipPlugin (с :source /usr/share/vim/vim73/plugin/zipPlugin.vim или :runtime plugin/zipPlugin.vim) из vimrc.AFAIK это не помешает плагину загружаться во второй раз, но, так как этот плагин использует охрану, он не будет переходить к линии сброса cpo при получении во второй раз.

Обратите внимание, что есливаш zipPlugin.vim идентичен моему, поэтому он не является источником проблемы: если вы посмотрите на его код, то увидите, что он сохраняет настройки cpoptions, а затем восстанавливает их.Так как другие плагины, распространяемые с vim, должны делать то же самое или вообще не касаться cpoptions, вы можете забыть приведенную выше рекомендацию.Я бы посоветовал сначала посмотреть, что строка set nocompatible (или set nocp), если она есть, является первой строкой, присутствующей в vimrc.Помните, что установка этого параметра приводит к тому, что многие другие параметры сбрасываются к значениям по умолчанию (включая cpoptions), и именно поэтому он должен идти перед любыми другими параметрами модификации строки.

Обновление: Теперь я вижу, что вы предоставили ссылку на vimrc, и у него нет вышеуказанной проблемы.Попробуйте проверить verbose set compatible?, затем попробуйте запустить vim с помощью следующей команды:

vim --cmd 'let g:sourced_files=[] | autocmd SourcePre * if !empty(g:sourced_files) && stridx(&cpo, "$")==-1 | echomsg "cpo does not contain dollar sign after loading ".g:sourced_files[-1] | set cpo+=$ | endif | let g:sourced_files+=[expand("<amatch>")]'

У вас будут некоторые ложные срабатывания: первый загруженный vimrc (/etc/vim/vimrc): потому что cpo не был установленлюбые плагины загружаются как

if exists("loaded_thlnk")
    finish
endif
let loaded_thlnk = 1
let s:save_cpo = &cpo
set cpo&vim

" (This is to allow installation of thlnk.vim with just :runtime plugin/thlnk.vim
"  without leaving vim after having thrown all files into a plugin directory :)
runtime! plugin/thlnkuri.vim
runtime! plugin/thlnkarr.vim
runtime! plugin/thlnkscm.vim

: здесь cpo сбрасывается перед загрузкой плагинов, но в конце идет

let &cpo = s:save_cpo

, поэтому это действительно безопасно.В моей системе есть только ложные срабатывания: хотя cpo сохраняется и восстанавливается многими плагинами, никакие плагины не забывают восстановить его или сделать что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...