【问题标题】:assign parameter to variable in .vimrc将参数分配给 .vimrc 中的变量
【发布时间】:2016-04-22 23:06:36
【问题描述】:

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

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: vim vim-plugin vundle


    【解决方案1】:

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


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

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

    【讨论】:

    • 谢谢!我试图根据文件类型启用的这两个插件似乎是相互排斥的——如果它们都被启用,它们就会开始相互干扰(至少这是我发现的 puppet 文件类型)所以唯一的解决方案是启用一次只有一个。这是否意味着唯一简单的解决方案是每次在我想编辑 python 或其他文件之前编辑 .vimrc。
    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2012-08-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多