用插件容器化vim



我正试图将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中看到其他人是如何做的。

  1. SpaceVim Docker install
  2. SpaceVim Docker repo
  3. 其他简单的例子

最新更新