1

为了根据文件类型在 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

在我看来,我不了解将参数值分配给变量的规则。

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

我非常感谢您的帮助。

4

1 回答 1

2

你的命令只vimrc执行一次,在加载任何缓冲区之前,所以没有缓冲区,因此&filetype在 Vundle 执行其可疑的“魔术”时没有缓冲区。


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

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

于 2016-01-17T21:59:07.273 回答