17

我使用 vundle 作为 vim 的插件管理器。我想使用 ansible 来自动安装 vundle 插件。

但我就是无法自动进行配置:

- name: install vundle plugin
  shell: vim +PluginInstall +qall

以上是 vim 的 ansible playbook YML 文件。当 ansible 开始运行这个任务时,它会永远持续下去,永远不会结束,永远不会失败。直到我强迫它停下来CTRL C

如果我直接在来宾操作系统中运行该命令,它工作正常,vim 显示并完成安装。

这里有什么问题?

===========================================
编辑:

在阅读Roy Zuo了答案后,打开 vim 的详细模式,我尝试了以下命令:

vim -E -s -c "source ~/.vimrc" +PluginInstall +qall -V

以下是输出:

continuing in /home/vagrant/.vimrc
Searching for "/usr/share/vim/vimfiles/after/syntax/syncolor.vim"
Searching for "/home/vagrant/.vim/after/syntax/syncolor.vim"
Searching for "/home/vagrant/.vim/bundle/Vundle.vim/syntax/syncolor.vim"
Searching for "/after/syntax/syncolor.vim"
Searching for "colors/solarized.vim" in "/home/vagrant/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/home/vagrant/.vim/after,/home/vagrant/.vim/bundle/Vundle.vim,/after"
Searching for "/home/vagrant/.vim/colors/solarized.vim"
Searching for "/usr/share/vim/vimfiles/colors/solarized.vim"
Searching for "/usr/share/vim/vim74/colors/solarized.vim"
Searching for "/usr/share/vim/vimfiles/after/colors/solarized.vim"
Searching for "/home/vagrant/.vim/after/colors/solarized.vim"
Searching for "/home/vagrant/.vim/bundle/Vundle.vim/colors/solarized.vim"
Searching for "/after/colors/solarized.vim"
not found in 'runtimepath': "colors/solarized.vim"
line  188:
E185: Cannot find color scheme 'solarized'
finished sourcing /home/vagrant/.vimrc
continuing in command line

似乎 vim 在找不到 .vimrc 中指定的插件时停止了。知道如何继续吗?

4

3 回答 3

10

在这种情况下,您可能希望 vim 在 EX 模式下运行,以避免调出需要 tty 才能显示的可视界面。请尝试以下命令。

vim -E -s -c "source ~/.vimrc" -c PluginInstall -c qa

这里-E告诉 vim 以 EX 模式启动,“-s”(仅在 EX 模式下可用help -s-ex)表示我们希望它在没有任何提示或信息性消息的情况下静默运行。此外,如果不获取运行时文件,EX 模式不知道如何执行PluginInstall命令。

 -s         Silent or batch mode.  Only when Vim was started as "ex" or
            when preceded with the "-e" argument.  Otherwise see -s,
            which does take an argument while this use of "-s" doesn't.
            To be used when Vim is used to execute Ex commands from a file
            instead of a terminal.  Switches off most prompts and
            informative messages.  Also warnings and error messages.
            The output of these commands is displayed (to stdout):
                    :print
                    :list
                    :number
                    :set      to display option values.

=====================

至于缺少的 Solarized 配色方案,由于您已经使用 Vundle,因此很容易在vimrc.

Plugin 'altercation/vim-colors-solarized'

并且您应该确保colorscheme solarized在它之后出现线。

于 2015-11-16T11:35:49.343 回答
0

问题是关于vim,但是如果您使用neovim--headless标志很好地解决了这个问题。

- name: install vundle plugin
  shell: nvim +PluginInstall +qall --headless
于 2020-01-03T00:46:26.027 回答
0

以下为我解决。我创建了一个角色来设置服务器用户环境。这包括设置 vim。我使用 Vundle,所以我也展示了如何在 ansible 中设置它。我在执行中使用了 Roy Zuo 他的 vim 命令。当 vim 命令获取 .vimrc 文件时, echo -ne '\n' 发送一个回车。Vim 抱怨尚未安装的插件要求我按 Enter 继续,因此这个解决方案。

在角色/vars/main.yml 中:

server_users:
  - joe
  - jane

在角色/任务/main.yml 中:

- name: copy .vimrc over to server
  copy:
    src: '.vimrc_{{ item }}'
    dest: '/home/{{ item }}/.vimrc'
    owner: "{{ item }}"
    group: "{{ item }}"
    mode: '0644'
  with_items: "{{ server_users }}"
  become: true 

  # https://github.com/VundleVim/Vundle.vim                                                                                                     
- name: install vim plugin handler                                                                                                            
  git:                                                                                                                                        
    repo: 'https://github.com/VundleVim/Vundle.vim.git'                                                                                       
    dest: '/home/{{ item }}/.vim/bundle/Vundle.vim'
  become_user: "{{ item }}"                                                                                         
  with_items: "{{ server_users }}"                                                                                                            
  become: true

- name: install vim plugins                                                                                                                   
  shell: >                                                                                                                                  
    echo -ne '\n' | vim -E -s -c "source ~/.vimrc" -c PluginInstall -c qa            
  register: resultvim
  become_user: "{{ item }}"
  with_items: "{{ server_users }}"
  become: true
  failed_when: ( result.rc not in [0,1] )

# optional for debugging
- debug:                                                                                                                                      
  msg: "{{ resultvim }}"

我将服务器用户的 vimrc 文件保存在这里

role/files/:
.vimrc_joe
.vimrc_jane
于 2020-02-26T19:49:53.667 回答