将参数赋给.vimrc中的变量

将参数赋给.vimrc中的变量,vim,vim-plugin,vundle,Vim,Vim Plugin,Vundle,为了根据文件类型在vim中自动添加插件,我决定在.vimrc文件中创建一个简单的函数。我使用Vundle作为插件管理器,并且根据Vundle的要求,应该关闭文件类型。我决定将文件类型保存在一个变量中,然后在Vundle的插件列表中使用它。以下是相关的.vimrc部分: set nocompatible " be iMproved, required filetype plugin indent on let var = &ft echo var function

为了根据文件类型在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 shell中发出相同的命令时,如下所示:

:let var = &ft
:echo var
我正在获取分配给var变量的实际文件类型

如果我只使用let var=“python”而不是let var=&ft,if语句的计算结果也将为true

在我看来,我不理解将参数值赋值给变量的规则

但我不知道这里出了什么问题


非常感谢您的帮助。

在加载任何缓冲区之前,
vimrc
中的命令只执行一次,因此在Vundle执行其令人质疑的“魔力”时,没有缓冲区,因此也就没有
&filetype


但你所做的在全球范围内毫无意义。特定于文件类型的插件通常是这样设计的,即只有在加载具有该文件类型的缓冲区时,才会加载其大多数特定于文件类型的功能。这是一个通过
ftplugin
功能处理的完全自动机制


启动时完全加载的文件类型特定插件是一个写得很差的插件,不值得安装。

谢谢!我试图基于文件类型启用的这两个插件似乎是相互排斥的——如果它们都启用了,它们就会开始相互干扰(至少我在puppet文件类型中发现了这一点),所以唯一的解决方案是一次只启用一个。这是否意味着唯一简单的解决方案是在每次编辑python或其他文件之前编辑.vimrc。