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.