我可以让 vim 安装捆绑包并在后台关闭吗?

我可以让 vim 安装捆绑包并在后台关闭吗?

我一直在研究 Dockerfiles,在设置开发环境时,有一个手动步骤我还没能解决。要在我的 vimrc 中安装软件包,我必须打开 vim,然后它会下载所有软件包并提示按 Enter 继续。我想将此步骤作为 Dockerfile 中的 RUN 命令执行。我尝试使用vim -c 'q',它在 vim 打开时运行命令:q,但自动软件包安装脚本仍然需要按 Enter,而且它无论如何都不起作用,因为 vim 抱怨输入和输出不在终端上。

我想用 Dockerfiles 而不是图像来实现这一点

这是我的 .vimrc 中似乎相关的部分

    " Setting up Vundle - the vim plugin bundler
        let iCanHazVundle=1
        let vundle_readme=expand('~/.vim/bundle/vundle/README.md')
        if !filereadable(vundle_readme)
            echo "Installing Vundle.."
            echo ""
            silent !mkdir -p ~/.vim/bundle
            silent !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
            let iCanHazVundle=0
        endif
        set rtp+=~/.vim/bundle/vundle/
        call vundle#rc()
        call GetBundles()
        if iCanHazVundle == 0
            echo "Installing Bundles, please ignore key map error messages"
            echo ""
            silent :BundleInstall
        endif
    " Setting up Vundle - the vim plugin bundler end

答案1

我发现这个问题更容易解决,方法是将插件列在单独的文件中vundle.vim。这样可以避免插件和.vimrc设置在防爆模式

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Add plugins
Plugin 'bling/vim-airline'
" ...

然后您可以按照如下所示以 ex 模式运行安装。

vim -E -u NONE -S ~/.vim/vundle.vim +PluginInstall +qall > /dev/null

答案2

下面是我的解决方案,使用 vundle 在后台静默安装插件,然后在同一个 shell 中完成后打印一条消息:

  1. 确保已下载 vundle repo:
git clone https://github.com/VundleVim/Vundle.vim.git $HOME/.vim/bundle/Vundle.vim

  1. 设置 .vimrc 文件以使用文德勒

  2. 在 bash shell 中运行此命令。它将从命令行运行 vim 作为后台进程。当它完成将所有插件安装到 ~/.vim/bundle 后,它将向启动它的 shell 发出 CTRL-C 信号,然后打印一条消息,让你知道插件已准备就绪。

((TEMP=$(vim -E -N -u /tmp/myconfig/.vimrc +PluginInstall +qall; echo -e "kill -INT $$; echo '''\033[31m
\n================================================\n
VUNDLE PLUGINS HAVE FINISHED INSTALLING/UPDATING 
\n================================================\n\033[37m'''; 
"); bash -c "$TEMP" ) &)

注意:CTRL-C 命令将取消您可能正在运行的任何前台进程。这样,在打印消息后,您将获得干净的提示。如果您不喜欢这样,请删除kill -INT $$;,但请注意,该消息将在前台进程中打印,并且可能看起来混乱/令人困惑。

相关内容