为了根据文件类型在vim中自动添加插件我决定在我的.vimrc文件中创建一个简单的函数。我使用Vundle作为插件管理器,并且根据Vundle的要求,应该关闭文件类型。我决定将filetype保存在变量中,然后在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" if语句的计算结果为true。而不是让var =& ft
在我看来,我并不了解将参数值赋值给变量的规则。
但我不知道这里有什么问题。
非常感谢你的帮助。
答案 0 :(得分:0)
vimrc
中的命令只在加载任何缓冲区之前执行,因此没有缓冲区,因此当时没有&filetype
Vundle做出了疑问"魔术"。
但你所做的事情在全球范围内毫无意义。特定于文件类型的插件通常以这样的方式设计:当加载具有该文件类型的缓冲区时,其大多数文件类型特定的功能仅 加载。这是一种通过ftplugin
功能处理的完全自动机制。
在启动时完全加载的特定于文件类型的插件是一个写得不好的插件,不值得安装。