使用插件容器化 vim

Containerizing vim with plugins

我正在尝试将 vim 与插件一起容器化。我正在使用奇点容器。最重要的插件是 youcompleteme。我将插件容器化的方法是安装 vim 并将所有插件克隆到 /etc/vim/plugin 并在构建期间编译 youcompleteme。 构建图像后,我使用指向 /etc/vim:

的修改后的 runtimepath (rtp) 启动 vim

singularity run vim_image.sif vim --cmd 'set rtp^=/etc/vim'

但是,vim 加载插件失败。我收到如下错误:

Error detected while processing /etc/vim/plugin/sonokai/autoload/airline/themes/sonokai.vim: line
10: E117: Unknown function: sonokai#get_configuration line 11: E121: Undefined variable: s:configuration E116: Invalid arguments for function sonokai#get_palette(s:configuration.style, s:configuration.colors_override)

...

我希望 vim 可以毫无问题地加载 /etc/vim/plugin 中的任何插件。我坚持这一点。欢迎提出任何建议。

install vim and clone all the plugins to /etc/vim/plugin

这行不通,即使在物理机上也是如此。

Vim 的运行时文件以特定方式布局,预计在所有级别都保持一致,因此将文件放在随机任意位置对您没有任何好处,因为什么都不会预计是。

在这个特定的例子中,plugin/sonokai/autoload/airline/themes/sonokai.vim 是一个自动加载的脚本,但是,因为你天真地把它放在 plugin/ 下,它被作为一个 全局插件 , 只会制造麻烦。

Vim 允许您在 plugin/ 下创建目录层次结构用于组织目的,但这些子目录仅用于 全局插件 。文件类型插件、语法脚本、缩进脚本、自动加载脚本等与那里无关,因此必须将它们移动到适当的目录下:ftplugin/syntax/

这种机制会导致这样一种情况,对于给定的 third-party 插件 foo 你会得到散落在周围的文件:

plugin/foo/foo.vim
syntax/foo/foo.vim
       bar/bar.vim
indent/foo/foo.vim
       bar/bar.vim
etc.

从技术上讲,它可以工作,如果您没有太多插件,它甚至可以使用,但它本质上是混乱的。

如今,处理插件的首选方式是通过新的 :help package 功能。在不破坏文档太多的情况下,Vim 的运行时中有一个名为 pack 的新目录,您可以在该目录下放置整个 third-party 插件,每个插件都在自己的目录中,这基本上就是什么您在 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. other simple example

试试这个命令:

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()

然后构建:

sudo docker build -t vim-plug .