Gvim表现得很奇怪,我无法找到原因。我使用Vundle,我.vimrc
中声明的所有插件都运行正常。我在.vim/after/ftplugin/java.vim
中声明了一些其他设置和插件。
映射工作正常,但插件不起作用。如果我在当前的gvim会话中选择了不同的文件,我会收到以下错误消息:
Error detected while processing function vundle#config#bundle[2]..<SNR>14_check_bundle_name:
line 2:
Vundle error: Name collision for Plugin Raimondi/delimitMate. Plugin Raimondi/delimitMate previously used the name "delimitMate". Skipping Plugin Raimondi/delimitMate.
Vundle error: Name collision for Plugin artur-shaik/vim-javacomplete2...
[comment: same error message for all plugins declared in the ftplugin]
我注意到,如果我运行:VundleInstall
,插件突然工作(当我更改文件时,错误消息仍然存在,当我使用该命令时没有安装插件)。
以下是.vimrc
的开头:
syntax on
set guifont=Inconsolata\ Medium\ 12
set nocompatible
set t_Co=256
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
"[comment: all plugins I use for every filetype]
call vundle#end() " required
filetype plugin indent on
这是我的java.vim
文件:
filetype off
"to automatically close brackets
Plugin 'Raimondi/delimitMate'
"omni-complete for Java
Plugin 'artur-shaik/vim-javacomplete2'
"use tab to navigate through insert completion
Plugin 'ervandew/supertab'
filetype plugin indent on
"needed to make javacomplete2 working properly
autocmd FileType java setlocal omnifunc=javacomplete#Complete
我的操作系统是Ubuntu 16.04。
答案 0 :(得分:2)
你误解了ftplugins正在做什么以及它们应该包含什么。
每次创建/打开新缓冲区时,每个缓冲区加载一次Ftplugins。
它们旨在包含缓冲区本地定义:
:map <buffer> keybinding action
:iab <buffer> keybinding expanded sequence
:setlocal option[=value]
:command -b CommandName :Action
:let b:option = value
然后他们可以使用:runtime
或:so
加载其他以相同方式工作的内容。它们可能包含函数,但最好将它们定义为自Vim7以来的自动加载插件。它们可能包含缓冲区本地菜单定义,但这需要plugin,因为这不是标准的。
它们最终并不意味着包含您定义的全局定义。它不是真正加载全局插件的地方,之后会保持激活状态。
我知道有些插件管理器会根据我们处理的文件类型动态加载插件。当我们使用正确定义的ftplugins和轻量级插件时,我从未分享过这种需求,这些插件只定义了一些映射并将其功能保存到自动加载插件中。
最后,ftplugins应该包含反加强防护。在典型情况下,这不是那么有用。许多人为了这个目的使用b:did_ftplugin
,但是我避免使用这个变量,因为我更喜欢拥有与主题一样多的ftplugins(对于相同的文件类型)(一个专门用于括号对,one that定义自动映射从变量类型扩展switch语句,one that定义控制语句的缩写,依此类推)。因此,我不能对所有文件使用相同的防护。
答案 1 :(得分:0)
所有:Plugin
命令都应该在这两行之间:
call vundle#begin()
" :Plugin commands go here
call vundle#end()
如果您绝对需要延迟加载,请尝试another plugin manager。