使用插件容器化 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 中看到其他人是如何做到的。
试试这个命令:
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 .
我正在尝试将 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 中看到其他人是如何做到的。
试试这个命令:
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 .