我正试图将vim与插件一起容器化。我用的是奇点容器。最重要的插件是youcompleteme。我将插件容器化的方法是安装vim并将所有插件克隆到/etc/vim/plugin
,并在构建期间编译完成。构建完映像后,我启动vim,使用指向/etc/vim
的修改后的runtimepath (rtp)
:
奇点运行vim_image。/etc/vim
但是,vim无法加载插件。我得到这样的错误:
处理时检测到错误/etc/vim/plugin/sonokai/autoload/airline/themes/sonokai.vim: line
10: E117:未知函数:sonokai#get_configuration line 11: E121:未定义变量:s:configuration E116:无效参数函数sonokai # get_palette (configuration.style,s: configuration.colors_override)…
我希望vim加载/etc/vim/plugin
内的任何插件没有任何问题。我被困住了。欢迎提出任何建议。
试试这个命令:
sudo docker run -it amine2029/vim-plug
我使用这个Dockerfile来构建它:
FROM ubuntu:18.04
RUN apt-get update -yq
&& apt-get install curl -yq
&& apt-get install -yq vim git
RUN curl -fLo ~/.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
ADD vimrc /root/.vimrc
RUN vim -E -s -u "$HOME/.vimrc" +PlugInstall +qall
这个'vimrc'文件需要在构建目录中(在这里添加更多插件):
call plug#begin()
Plug 'tomlion/vim-solidity'
call plug#end()
then to build:
sudo docker build -t vim-plug .
安装vim并将所有插件克隆到
/etc/vim/plugin
这是行不通的,即使是在物理机上。
Vim的运行时文件以一种特定的方式排列,期望在所有级别上保持一致,因此将文件随机放置在任意位置不会对您有任何好处,因为没有任何东西会在预期的位置。
在这个特定的情况下,plugin/sonokai/autoload/airline/themes/sonokai.vim
是一个自动加载的脚本,但是,因为你naïvely把它放在plugin/
下,它是作为一个全局插件来源的,这只会制造麻烦。
Vim允许您在plugin/
下创建目录层次结构,但这些子目录仅用于全局插件。Filetype插件,语法脚本,缩进脚本,自动加载脚本等在那里没有任何事情,所以它们必须移动到适当的目录下:ftplugin/
,syntax/
等。
这种机制导致这样一种情况:对于给定的第三方插件foo
,您将获得分散的文件:
plugin/foo/foo.vim
syntax/foo/foo.vim
bar/bar.vim
indent/foo/foo.vim
bar/bar.vim
etc.
从技术上讲,它可以工作,如果你没有太多的插件,它甚至可能可用,但它本质上是混乱的。
现在,处理插件的首选方式是通过新的:help package
特性。在没有过多破坏文档的情况下,Vim的运行时中有一个名为pack
的新目录,您可以在其中放置整个第三方插件,每个插件都在自己的目录中,这基本上是您在plugin/
中尝试和失败的。所以,你可以用:
" one directory for plugin `foo`
pack/<whatever>/start/foo/plugin/foo.vim
indent/foo.vim
syntax/foo.vim
" and one directory for plugin `bar`
pack/<whatever>/start/bar/indent/bar.vim
syntax/bar.vim
在普通用户的正常设置中,应该在$HOME/.vim/
下创建pack
目录。在这种特殊情况下,正确的位置几乎肯定是$VIM/vimfiles/
。$VIM
的确切值取决于很多事情,所以你必须问Vim它在哪里:
:echo $VIM
并相应地调整您的安装脚本。
我不确定容器化Vim的好处。
由于我无法评论,我将把这些留在这里。你可以在最流行的vim发行版SpaceVim中看到其他人是如何做的。
- SpaceVim Docker install
- SpaceVim Docker repo
- 其他简单的例子