阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用 Ansible 配置 Vim并安装插件

33次阅读
没有评论

共计 4012 个字符,预计需要花费 11 分钟才能阅读完成。

导读 本文将使用 Centos8 系统通过编写 Ansible playbook 来扩展使用 vim 编辑器。通过介绍每一步的操作说明,最后将汇总起来。

在执行本实验钱,需要将 .vimrc 备份一下。本文编写的 playbook 会覆盖现有的 .vimrc 配置文件。

安装 ansible
[ansible@Master ~]$ yum -y install ansible
创建 playbook

创建 Ansible playbook 文件 vim-config.yaml

[ansible@Master ~]$ vim vim-config.yaml

现在,通过提供名称和目标主机列表来开始 playbook 的定义。本文,我们仅安装在本机,所以 hosts: 部分的值写的是localhost。如果需要将 vim 部署到其他主机中,可以再次写入清单里面的主机、主机组。

---
- name: Config Vim with Plugins
  hosts: localhost

接下来,设置 gather_facts: yes 选项以收集有关系统信息。我们需要它来访问下一步中的环境变量:

gather_facts: yes
定义变量

配置 Vim 和 Vim 插件需要向 $HOME/.vim 目录和 $HOME/.vimrc 配置文件添加内容。让我们定义两个变量来存储它们的值:

vars:
    vim_dir: "{{ansible_env.HOME}}/.vim"
    vimrc: "{{ansible_env.HOME}}/.vimrc"

我们使用 ansible_env.HOME 变量来获取 $HOME环境变量的值。

安装所需的包

现在开始定义 playbook 将运行的任务。首先提供tasks:

tasks:

由于第一个任务是安装一些我们稍后将安装的 Vim 插件所需的系统包。使用 package 模块安装它们:

- name: Install required packages
    package:
      name:
        - vim-enhanced
        - git
        - powerline-fonts
        - fzf
      state: installed
    become: yes
    tags: install_packages

package模块适用于不同的发行版。可以设置 become: yes 自动提升权限。tags为安装部分添加一个标签,方便后面单独安装。

创建目录

使用带有参数 state: directoryfile 模块来创建目录。由于有三个目录,因此使用 loop 模块来保存所需的条目:

- name: Ensure .vim/{autoload,bundle} directory exists
    file:
      path: "{{item}}"
      state: directory
      recurse: no
      mode: 0750
    loop:
      - "{{vim_dir}}"
      - "{{vim_dir}}/autoload"
      - "{{vim_dir}}/bundle"
下载 vim 插件管理器

本文使用 Vim-Pathogen 作为 Vim 插件管理器。若要使用 Ansible 安装它,可以使用get_url 模块将插件下载到其目标目录:

- name: Ensure Pathogen is in place
    get_url:
      url: https://github.com/tpope/vim-pathogen/blob/master/autoload/pathogen.vim
      dest: "{{vim_dir}}/autoload/pathogen.vim"
从 github 克隆插件

安装 Pathogen 后,从 GitHub 克隆到目标目录来部署所需的插件。与创建目录类似,使用 loop 模块克隆所需的仓库:

- name: Deploy Plugins
    git:
      repo: "{{item.url}}"
      dest: "{{vim_dir}}/bundle/{{item.name}}"
      clone: yes
      update: yes
      recursive: no
    loop:
      - name: vim-airline
        url: https://github.com/vim-airline/vim-airline
      - name: nerdtree
        url: https://github.com/preservim/nerdtree
      - name: fzf-vim
        url: https://github.com/junegunn/fzf.vim
      - name: vim-gitgutter
        url: https://github.com/airblade/vim-gitgutter
      - name: vim-fugitive
        url: https://github.com/tpope/vim-fugitive
      - name: vim-floaterm
        url: https://github.com/voldikss/vim-floaterm

我们使用字典列表作为 loop 的输入,调用他们的语法是 {{item.KEY}}

创建 vim 配置文件

作为最后的任务,使用 copy 模块复制 Vim 的配置文件。首先,在子目录 files 下创建配置文件:

[ansible@Master ~]$ mkdir files
[ansible@Master ~]$ vim files/vimrc

将如下内容复制到 files/vimrc 中:

execute pathogen#infect()
syntax on
filetype plugin indent on

colo darkblue

" Configuration vim Airline
set laststatus=2

let g:airline#extensions#tabline#enabled=1
let g:airline_powerline_fonts=1

" Configuration NERDTree
map  :NERDTreeToggle

" Configuration floaterm
let g:floaterm_keymap_toggle = ''
let g:floaterm_width = 0.9
let g:floaterm_height = 0.9

" Configuration Vim.FZF
let g:fzf_preview_window = 'right:50%'
let g:fzf_layout = {'window': { 'width': 0.9, 'height': 0.6}  }

如何使用 Ansible 配置 Vim 并安装插件
然后,使用 copy 模块将文件复制到目的地:

- name: Ensure vimrc config in place
    copy;
      src: vimrc
      dest: "{{vimrc}}"
      backup: yes
      mode: 0640

注意,不需要在 src 路径中指定 files 目录。默认情况下,Ansible 在此子目录 files 中查找要复制的文件。

playbook 剧本内容整合到一起

这里是完整的剧本:

---
- name: Config Vim with Plugins
  hosts: localhost  gather_facts: yesvars:
    vim_dir: "{{ansible_env.HOME}}/.vim"
    vimrc: "{{ansible_env.HOME}}/.vimrc"  tasks:
  - name: Install required packages
    package:
      name:
        - vim-enhanced
        - git
        - powerline-fonts
      state: installed
    become: yes
    tags: install_packages- name: Ensure .vim/{autoload,bundle} directory exists
    file:
      path: "{{item}}"
      state: directory
      recurse: no
      mode: 0750
    loop:
      - "{{vim_dir}}"
      - "{{vim_dir}}/autoload"
      - "{{vim_dir}}/bundle"  - name: Ensure Pathogen is in place
    get_url:
      url: https://tpo.pe/pathogen.vim
      dest: "{{vim_dir}}/autoload/pathogen.vim"- name: Deploy Plugins
    git:
      repo: "{{item.url}}"
      dest: "{{vim_dir}}/bundle/{{item.name}}"
      clone: yes
      update: yes
      recursive: no
    loop:
      - name: vim-airline
        url: https://github.com/vim-airline/vim-airline
      - name: nerdtree
        url: https://github.com/preservim/nerdtree
      - name: fzf-vim
        url: https://github.com/junegunn/fzf.vim
      - name: vim-gitgutter
        url: https://github.com/airblade/vim-gitgutter
      - name: vim-fugitive
        url: https://github.com/tpope/vim-fugitive
      - name: vim-floaterm
        url: https://github.com/voldikss/vim-floaterm  - name: Ensure vimrc config in place
    copy:
      src: vimrc
      dest: "{{vimrc}}"
      backup: yes
      mode: 0640

如何使用 Ansible 配置 Vim 并安装插件
使用 ansible-playbook 命令执行改剧本。由于此剧本仅针对本地主机,因此并不严格要求清单。首先添加 -C 选项,用来试运行一下,检查错误。然后再执行。

[ansible@Master ~]$ ansible-playbook -C vim-config.yaml 
[ansible@Master ~]$ ansible-playbook vim-config.yaml
总结

通过本剧本,可以深入了解 ansible playbook 的许多模块使用方法。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计4012字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中