在 docker 构建期间自动执行 vim 插件安装



我正在构建一个 docker 镜像,我希望它拉下保存在我的 github 上的 dotfiles,以及安装我指定的 vim 插件。

RUN cd ~ && git clone https://github.com/bdhammel/dotfiles.git && 
    ./dotfiles/makesymlinks.sh && vim +silent! +PluginInstall +qall

但是,这样做会引发此错误并终止构建:

Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal

有什么方法可以解决这个问题吗?

默批处理模式

对于非常简单的文本处理(即使用 Vim 像增强的"sed"或"awk",没有任何交互性<= 这是防止输入/输出不是来自终端错误的原因),请使用 Ex-mode

vim -T dumb -n -i NONE -es -S "commands.ex"

注意:如果 "commands.ex" 文件不存在,Vim 将挂起等待输入;最好事先检查它是否存在!或者,Vim 可以从 stdin(标准)读取命令。您还可以使用从 stdin 读取的文本填充新缓冲区,如果使用 - 参数,则可以从 stderr读取命令。

为了避免使用单独的脚本来包含命令,您可以使用 Bash 的进程替换

... -S <(echo -e "silent! PluginInstallnqall")

这是我使用的一个完全工作的示例:

RUN [ "/bin/bash", "-c", "vim -T dumb -n -i NONE -es -S <(echo -e 'silent! PluginInstall')" ]

最新更新