назначить параметр переменной в .vimrc

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

set nocompatible              " be iMproved, required
filetype plugin indent on
let var = &ft
echo var
function Plugin_set(var)
   if (a:var == "python")
     Plugin 'Python-mode-klen'
   else
     Plugin 'scrooloose/syntastic'
   endif
endfunc
"Vundle Section Begin
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" All of your Plugins must be added after the following line
Plugin 'Tagbar'
Plugin 'VundleVim/Vundle.vim'
Plugin 'surround.vim'
Plugin 'better-snipmate-snippet'
Plugin 'bling/vim-airline'
Plugin 'Tabular'
Plugin 'rodjek/vim-puppet'
call Plugin_set(var)
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

Я не получаю вывода в строке «echo var», где я ожидаю появления типа файла. Тогда, конечно, оператор if оценивается как false, а else используется независимо от того, какой фактический тип файла я открываю.

Но когда я пытаюсь дать те же команды в оболочке vim, например:

:let var = &ft
:echo var

Я получаю фактический тип файла, назначенный переменной var.

Оператор if также оценивается как true, если я просто использую let var = "python" вместо let var = &ft

Мне кажется, я не понимаю правил присвоения значений параметров переменным.

Но я просто понятия не имею, что здесь не так.

Я очень ценю вашу помощь.


person Danil Zhigalin    schedule 17.01.2016    source источник


Ответы (1)


Команды в вашем vimrc выполняются только один раз, перед загрузкой любого буфера, поэтому буфера нет и, следовательно, нет &filetype к тому времени, когда Vundle выполняет свою сомнительную «магию».


Но то, что вы делаете, глобально бессмысленно. Плагины для конкретных типов файлов обычно разрабатываются таким образом, что большинство их функций для конкретных типов файлов загружаются только при загрузке буфера с этим типом файла. Это полностью автоматический механизм, управляемый функцией ftplugin.

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

person romainl    schedule 17.01.2016
comment
Спасибо! Эти два плагина, которые я пытался включить на основе типа файла, кажутся взаимоисключающими — если они оба включены, они начинают мешать друг другу (по крайней мере, это то, что я обнаружил для типа файла puppet), поэтому единственное решение — включить только по одному. Означает ли это, что единственным простым решением будет редактировать .vimrc каждый раз, прежде чем я захочу редактировать python или другие файлы. - person Danil Zhigalin; 18.01.2016