我正在构建一个 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')" ]