我正在构建一个docker镜像,我希望它能够下载我的dotfiles,保存在我的github上,以及安装我指定的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模式。
vim -T dumb -n -i NONE -es -S "commands.ex"
注意:如果"commands.ex"
文件不存在,Vim将挂起等待输入;更好地检查它的存在!或者,Vim可以从stdin读取命令。您还可以使用从stdin读取的文本填充新缓冲区,如果使用-
参数,则从stderr读取命令。
要避免使用命令单独的脚本,可以使用Bash的进程替换:
... -S <(echo -e "silent! PluginInstall\nqall")
这是我使用的完整工作示例:
RUN [ "/bin/bash", "-c", "vim -T dumb -n -i NONE -es -S <(echo -e 'silent! PluginInstall')" ]