Cómo usar Ansible para configurar Vim

En el artículo Los cinco mejores complementos de Vim para administradores de sistemas, cubrí cinco complementos más una bonificación que facilita la vida de los administradores de sistemas cuando usan Vim. Este artículo ampliará esto mediante el desarrollo de un Ansible libro de jugadas para configurar un entorno Vim inicial usando estos complementos.

Este libro de jugadas funciona en el sistema Fedora Linux, pero debería funcionar igual con otras distribuciones con pequeñas modificaciones. En cada una de las siguientes secciones, discutiremos las modificaciones necesarias para que funcione en otros sistemas.

Notar: Este libro de jugadas sobrescribe un .vimrc configuración, por lo tanto, es más útil configurar un nuevo sistema en el que Vim aún no está configurado. Si tiene un archivo de configuración de Vim existente, haga una copia de seguridad antes de ejecutar este libro de jugadas.

Para ejecutar este libro de jugadas, debe instalar Ansible. En Fedora, puede instalar Ansible usando dnf, así:

$ sudo dnf install -y ansible

Para obtener más detalles sobre las opciones de instalación de Ansible, consulte la Guía de instalación de Ansible.

Índice

1. Comience el libro de jugadas

Cree su archivo de libro de jugadas de Ansible vim-config.yaml y edítalo con tu editor de texto favorito. Si es nuevo en Ansible, consulte esto libro de juegos enlace para saber más.

$ vi vim-config.yaml

Ahora comience la definición de su libro de jugadas proporcionando un nombre y la lista de hosts de destino. En este caso, solo apuntaremos localhost para configurar Vim localmente.

- name: Config Vim with plugins
  hosts: localhost

Luego establezca el gather_facts: yes posibilidad de recoger los hechos en su sistema. Lo necesitará para acceder a las variables de entorno en el siguiente paso:

  gather_facts: yes

Finalmente, configure la opción global become: no para indicar que, en general, estas tareas no requieren escalada de privilegios. Estableceremos la elevación de privilegios localmente para las tareas individuales que lo necesiten, como la instalación de paquetes del sistema.

  become: no

A continuación, defina algunas variables útiles.

2. Definición de variables

La configuración de los complementos Vim y Vim requiere agregar contenido al $HOME/.vim directorio y $HOME/.vimrc archivo de configuración. Para asegurarnos de que usamos estos valores de manera consistente y evitar tener que volver a escribirlos varias veces, definamos dos variables para almacenar sus valores:

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

Tenga en cuenta que usamos el ansible_env.HOME variable de hecho para recuperar el valor de la $HOME Variable ambiental. Para obtener más información sobre la obtención de variables de entorno, consulte la Documentación.

Ahora comencemos a definir las tareas realizadas por el libro de jugadas.

3. Instale los paquetes necesarios

El siguiente paso en la creación de un libro de jugadas es definir las tareas que realizará el libro de jugadas. Comience proporcionando la tasks: parámetro del libro de jugadas:

  tasks:

Como la primera tarea es instalar los paquetes del sistema requeridos por algunos de los complementos de Vim, lo instalaremos más tarde. Utilizar el paquete módulo para instalarlos y proporcionar el parámetro become: yes para habilitar la elevación de privilegios, que se requiere para instalar paquetes del sistema:

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

el package El módulo funciona en diferentes distribuciones, pero los nombres de los paquetes son diferentes. Estos valores son válidos para Fedora 32. Si está ejecutando este libro de jugadas en una distribución diferente, cambie los nombres de los paquetes según los requisitos de su distribución.

Luego crea el .vim estructura de directorios.

4. Creación de directorios

Utilizar el archivar módulo con el parámetro state: directory para crear los directorios necesarios. Dado que hay tres directorios, ejecute este módulo en un hebilla para crearlos todos con una sola tarea:

    - 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"

Tenga en cuenta que usamos el vim_dir variable que definimos previamente para representar la .vim directorio telefónico. usamos el Jinja2 sintaxis {{ vim_dir }}.

Ahora que los directorios están en su lugar, debe descargar Pathogen.

5. Descarga de patógenos

Para este ejemplo, usemos Vim-Patógeno como administrador de complementos de Vim. Para instalarlo usando Ansible, aplique el obtener_url módulo para descargar el archivo del complemento directamente a su directorio de destino:

    - name: Ensure Pathogen is in place
      get_url:
        dest: "{{ vim_dir }}/autoload/pathogen.vim"
        url: https://tpo.pe/pathogen.vim

Luego implemente los complementos necesarios.

6. Implementación de complementos desde Git

Una vez que Pathogen esté instalado, usemos el idiota módulo para implementar los complementos necesarios mediante la clonación de su repositorio de GitHub en el directorio de destino. Similar a la creación de directorios, use un bucle para clonar todos los repositorios con una tarea:

    - name: Deploy plugins
      git:
        dest: "{{ vim_dir }}/bundle/{{ item.name }}"
        repo: "{{ item.url }}"
        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

Tenga en cuenta que estamos usando una lista de diccionarios como entrada para el ciclo y usando sus valores con la sintaxis {{ item.KEY }} opcionalmente como entrada para los parámetros del módulo.

Luego copie un archivo de configuración básica para Vim.

7. Copia del archivo de configuración inicial

Como tarea final, utilice el Copiar módulo para copiar un archivo de configuración básica para Vim. Primero, cree el archivo de configuración en un subdirectorio files:

$ mkdir files
$ vim 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 <F5> :NERDTreeToggle<CR>

" Configuration floaterm
let g:floaterm_keymap_toggle="<F12>"
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  }  }

Luego usa el copy módulo para copiar el archivo al destino de destino:

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

Tenga en cuenta que no necesita especificar el directorio files en el src sendero. De forma predeterminada, Ansible busca archivos para copiar en este subdirectorio.

Finalmente, ejecute el libro de jugadas.

8. Montar todo

Su libro de jugadas está terminado. Como referencia, aquí está el libro de jugadas completo:

- name: Config Vim with plugins
  hosts: localhost
  gather_facts: yes
  become: no
  vars:
    vim_dir: "{{ ansible_env.HOME }}/.vim"
    vimrc: "{{ ansible_env.HOME }}/.vimrc"

  tasks:
    - name: Install required packages
      package:
        name:
          - vim-enhanced
          - git
          - powerline-fonts
          - fzf
        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:
        dest: "{{ vim_dir }}/autoload/pathogen.vim"
        url: https://tpo.pe/pathogen.vim

    - name: Deploy plugins
      git:
        dest: "{{ vim_dir }}/bundle/{{ item.name }}"
        repo: "{{ item.url }}"
        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

Ahora guarde su archivo y luego cierre el editor de texto.

Ejecute el libro de jugadas usando el ansible-playbook comando y el nombre del libro de jugadas. Dado que este manual tiene como objetivo localhost solamente, no se requiere estrictamente un inventario. Siempre puedes crear uno. Además, dado que una de las tareas requiere elevación de privilegios, proporcione el parámetro -K para escribir tu sudo contraseña, lo que permite a Ansible realizar estas tareas.

Notar: Guardar uno existente .vimrc archivo de configuración antes de ejecutar este libro de jugadas.

$ ansible-playbook -K vim-config.yaml
BECOME password: 
PLAY [Config Vim with plugins] *************************************

TASK [Gathering Facts] *********************************************
ok: [localhost]

TASK [Install required packages] ***********************************
changed: [localhost]

TASK [Ensure .vim/{autoload,bundle} directory exists] **************
 changed: [localhost] => (item=/home/ricardo/.vim)
 changed: [localhost] => (item=/home/ricardo/.vim/autoload)
 changed: [localhost] => (item=/home/ricardo/.vim/bundle)

TASK [Ensure Pathogen is in place] *********************************
changed: [localhost]

TASK [Deploy plugins] **********************************************
 changed: [localhost] => (item={'name': 'vim-airline', 'url': 'https://github.com/vim-airline/vim-airline'})
 changed: [localhost] => (item={'name': 'nerdtree', 'url': 'https://github.com/preservim/nerdtree'})
 changed: [localhost] => (item={'name': 'fzf-vim', 'url': 'https://github.com/junegunn/fzf.vim'})
 changed: [localhost] => (item={'name': 'vim-gitgutter', 'url': 'https://github.c
 changed: [localhost] => (item={'name': 'vim-fugitive', 'url': 'https://github.com/tpope/vim-fugitive'})
 changed: [localhost] => (item={'name': 'vim-floaterm', 'url': 'https://github.com/voldikss/vim-floaterm'})

TASK [Ensure .vimrc config in place] *******************************
changed: [localhost]

PLAY RECAP *********************************************************
localhost  : ok=5   changed=5   unreachable=0   failed=0   skipped=0   rescued=0   ignored=0   

Ahora puede probar su nueva configuración de Vim ejecutando vim:

¿Y después?

Ha creado un libro de jugadas para automatizar la implementación de una configuración básica de Vim con seis complementos útiles para los administradores de sistemas. Si desea usar el mismo libro de jugadas para implementar complementos adicionales, agréguelos a la lista de bucles en el Deploy plugins Tareas. También agregue cualquier paquete de sistema requerido al Install required packages Tareas.

Con este libro de jugadas, puede implementar y actualizar rápidamente su configuración de Vim utilizando los principios de la infraestructura como código.

Para obtener más información sobre Ansible, consulte su documentos oficiales.

Artículos de interés

Subir