GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar Ansible para configurar Vim

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

Este libro de jugadas funciona en el sistema Fedora Linux, pero debería funcionar de manera similar con otras distribuciones al hacer pequeñas modificaciones. En cada una de las siguientes secciones, analizaremos los cambios necesarios para que funcione en otros sistemas.

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

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.

1. Comenzando 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 la primera vez que utiliza Ansible, consulte este enlace de manual de estrategias para obtener más información.

$ vi vim-config.yaml

[ También te puede interesar: Una introducción al editor vi ]

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

- name: Config Vim with plugins
  hosts: localhost

A continuación, configure gather_facts: yes opción para recopilar datos sobre 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 una escalada de privilegios. Estableceremos la escalada de privilegios localmente para tareas individuales que lo requieran, 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 Vim y los complementos de Vim requiere agregar contenido a $HOME/.vim directorio y al $HOME/.vimrc archivo de configuración. Para asegurarnos de que usamos estos valores consistentemente y evitar tener que volver a escribirlos muchas veces, definamos dos variables para almacenar sus valores:

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

Tenga en cuenta que estamos usando ansible_env.HOME variable fact para recuperar el valor de $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 que ejecuta el libro de jugadas.

3. Instalando paquetes requeridos

El siguiente paso en la creación de un libro de jugadas es definir las tareas que ejecutará el libro de jugadas. Comience proporcionando las 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, instalaremos más adelante. Use el módulo del paquete para instalarlos y proporcione el parámetro become: yes para habilitar la escalada 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.

A continuación, cree el .vim estructura de directorios.

4. Crear directorios

Utilice el módulo de archivo con el parámetro state: directory para crear los directorios necesarios. Dado que hay tres directorios, ejecute este módulo en un bucle 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 estamos usando el vim_dir variable que definimos anteriormente para representar el .vim directorio. Estamos usando la sintaxis de Jinja2 {{ vim_dir }} .

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

5. Descarga de patógenos

Para este ejemplo, usemos Vim-Pathogen como administrador de complementos de Vim. Para instalarlo usando Ansible, aplique el módulo get_url 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

A continuación, implemente los complementos necesarios.

6. Implementación de complementos desde Git

Una vez que Pathogen esté instalado, usemos el módulo git para implementar los complementos necesarios clonando 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 sola 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

Observe que estamos usando una lista de diccionarios como entrada para el ciclo y usando sus valores con la sintaxis {{ item.KEY }} donde sea necesario como entrada para los parámetros del módulo.

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

7. Copiando el archivo de configuración inicial

Como tarea final, use el módulo de copia para copiar un archivo de configuración básico 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 la copy módulo para copiar el archivo al destino objetivo:

    - 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. Poniendo todo junto

Tu libro de jugadas está hecho. 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 libro de jugadas apunta al localhost solamente, no se requiere estrictamente un inventario. Todavía puedes crear uno. Además, debido a que una de las tareas requiere una escalada de privilegios, proporcione el parámetro -K para escribir su sudo contraseña, lo que permite a Ansible ejecutar esas tareas.

Nota :Copia de seguridad de un .vimrc existente archivo de configuración antes de ejecutar este manual.

$ 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 :

[ ¿Necesita más información sobre Ansible? Realice un curso gratuito de descripción técnica de Red Hat. Ansible Essentials:descripción técnica de la simplicidad en la automatización. ] 

¿Qué sigue?

Creó 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 utilizar el mismo libro de jugadas para implementar complementos adicionales, agréguelos a la lista de bucles en Deploy plugins Tareas. Además, agregue cualquier paquete de sistema requerido a Install required packages tareas.

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

Para obtener más información sobre Ansible, consulte su documentación oficial.


Linux
  1. Cómo configuro Vim como mi editor predeterminado en Linux

  2. Cómo uso Ansible y Anacron para la automatización

  3. Cómo usar Ansible para instalar y configurar Redis 6 en Debian 11

  4. Ubuntu 19.04:Configurar vim

  5. Configurar GIMP 2.10 para usar atajos de teclado de Photoshop (Cómo)

Cómo usar bucles en Ansible Playbook

Cómo usar la plantilla Jinja2 en Ansible Playbook

Cómo usar controladores en Ansible Playbook

Cómo crear y usar datos personalizados en Ansible

Cómo usar Ansible para configurar un proxy inverso

Cómo usar Ansible para enviar un correo electrónico usando Gmail