vim: plugins y configuraciones
Segundo y último post de la serie relacionada con el curso “Vim profesional”. Aquí se recogen los pasos necesarios para configurar vim como IDE de desarrollo.
Fecha: 01 Aug 2023 - Autor: Antonio
Formación: Vim Profesional
Post en Categoría: Devops
Etiquetas: / tutoriales / apuntes / how-to /
- Configuraciones
- Plugins
- Anexos
- Resultado final
- Recursos
Continuamos con el curso de vim profesional que iniciamos con esta guía rápida de comandos de vim y acabará con este post sobre plugins y configuraciones que incluiremos en nuestro fichero .vimrc
Configuraciones
Para el manejo de las configuraciones nativas, plugins y otras funcionalidades como mapeos y abreviaturas en vim, tenemos que escribirlas en el fichero .vimrc
, que crearemos en el directorio $HOME
de nuestro usuario.
Antonio@WIN10-DESK MINGW64 ~
$ vim .vimrc
/c/Users/Antonio
Configuraciones nativas
Estas configuraciones se pueden aplicar sin necesidad de instalar ningún plugin. Están disponibles con la instalación básica de vim
.
A contiuación añadimos el extracto de .vimrc
que estamos utilizando para definir estas configuraciones y a continuación una ligera explicación de lo que hace cada una de ellas.
" file: ".vimrc"
1 " Configuraciones nativas
1 set number " Añade número de línea en el margen izquierdo
2 set rnu " Indica el número de líneas por encima y por debajo de la actual.
3 set cursorline " Señala la línea en la que estamos
4 set mouse=a " Habilita interacción de vim con el ratón
5 set clipboard=unnamed " Permite compartir el clipboard entre vim y el sistema
6 set laststatus=2 " El buffer de undo y redo que almacenamos, podemos hacerlo mayor
7 set noshowmode " Activando esto dejamos de mostrar el modo en el que estamos, lo activaremos mas adelante a través del plugin Airline
8 set showmatch " En la apertura de `(`,`{` o `[` resalta la pareja correspondiente. Si estando encima pulsamos `%` en `modo Normal`, saltamos al carácter que cierra la pareja con el cursor.
9 set encoding=utf-8 " Seteamos el encoding por defecto de nuestros ficheros.
10 syntax enabled " Permitimos que se habilite el ensalzado por sintaxis.
Plugins
Para manejar los plugins será necesario instalar un gestor de plugins. Existen varios:
- vundle
- Pathogen
- VAM
- plug
En nuestro caso utilizaremos plug
por su sencillez de uso.
vim-plug
Es el gestor de plugins que vamos a utilizar por los siguientes motivos que indican en la página oficial:
- Fácil de configurar: Un simple fichero. No requiere código repetitivo.
- Fácil de usar: Conciso, sintáxis intutiva.
- Instalación/actualización super rápida en paralelo.
- Crea clones superficiales para minimizar el espacion en disco y el tiempo de carga.
- Carga bajo demanda para un tiempo de inicio más rápido.
- Se pueden revisar y revertir actualizaciones
- Soporte de rama/etiqueta/commit.
Instalación
Seguiremos la guía que hay en la documentación oficial
Aunque estemos en un sistema Windows debemos utilizar el comando indicado en la documentación para sistemas Unix.
Antonio@WIN10-DESK MINGW64 ~ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
La salida deseada es la siguiente:
Antonio@WIN10-DESK MINGW64 ~
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
> https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 83127 100 83127 0 0 211k 0 --:--:-- --:--:-- --:--:-- 211k
Antonio@WIN10-DESK MINGW64 ~
Una vez realizada la instalación debemos añadir las siguientes líneas al principio de nuestro fichero .vimrc
" file: ".vimrc"
call plug#begin('~/.vim/autoload')
call plug#end()
El valor de la ruta definida en la línea de begin
viene dado por donde hayamos realizado la instalación con el curl. En nuestro caso dicho valor es ~/.vim/autoload/plug.vim
. Por lo tanto sólo añadimos la ruta, obviando el fichero plug.vim
en el fichero .vimrc
Validar la instalación de plug
Una vez que hemos ejecutado los pasos anteriores, accederemos nuevamente al fichero .vimrc
y en modo Comando
introduciremos la palabra :Plug
y tabularemos. Eso hará que aparezcan varias opciones como: Plug, PlugClean, PlugDiff, PlugInstall, PlugSnapshot, PlugStatus, PlugUpdate o PlugUpgrade.
Con esto sería suficiente para dar por buena la instalación de plug
como nuestro gestor de plugins de vim.
Themes
Ahora que tenemos plug
instalado, podemos comenzar a instalar plugins. Empezaremos por los Themes
o Temas
, que no es otra cosa que la apariencia que tendrá vim
en cuanto a combinación de colores de fondo, de letra, de tabline, etc.
Podemos seleccionar alguno de los temas que se ven en esta lista
Una vez seleccionemos uno, procederemos a su instalación.
- Añadiremos la siguiente línea entre los
call
que definimos en el punto anterior." file: ".vimrc" call plug#begin('~/.vim/autoload') Plug 'rakr/vim-one' call plug#end()
- Ejecutaremos el comando
:PlugInstall
enmodo Comando
en nuestro fichero.vimrc
. - Añadiremos el
colorscheme
que no indique la documentación de nuestro theme después delcall plug#end()
Todos las instalaciones de plugins con vim-plug
siguen el mismo patrón. Si el plugin está publicado en Github tendrá el siguiente esquema de url: https://github.com/<github-user>/<repository-name>/
. Pues bien, para instalar cualquier plugin tenemos que añadir la línea Plug '<github-user>/<repository-name>'
dentro el bloque call plug
de nuestro .vimrc
y ejecutar :PlugInstall
después de haber guardado, salido y vuelto a entrar al fichero.
Airline y Airline themes
Usaremos este par de plugins para mejorar la línea de estado del fichero o tabline
, donde se informa el modo en el que estamos, la rama de git en la que se esta editando, la posición del cursor dentro del fichero, etc.
Los enlaces a los repositorios en GitHub de cada unos serían:
Para instalar (ambos plugins de una tacada), procedemos como en el caso anterior:
" file: ".vimrc"
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Ejecutamos :PlugInstall
. Después fuera del bloque call
añadiremos las siguientes líneas:
" file: ".vimrc"
" Config para Airline
let g:airline#extensions#tabline#enabled = 2 " Hace que aprezca el nombre del fichero en la parte superior izquierda del editor.
let g:airline_theme='one' " Este theme se refiere a airline.
La primera como añadimos en el comentario, muestra el nombre del fichero en la esquina superior izquierda de nuestro terminal. La segunda se refiere al theme de Airline seleccionado.
NERDTree
NERDTree es un gestor de archivos para poder movernos por el arbol de directorios de nuestro sistema sin salirnos del editor vim
.
Instalación
Podemos seguir la guía de la documentación oficial o estos sencillos pasos que añadimos a continuación.
Como venimos haciendo con los anteriores plugin, añadiremos la línea Plug preservim/nerdtree
. Guardamos, salimos y volvemos a entrar y ejecutamos :PlugInstall
Uso de NERDTree
De manera manual podemos abrir con el modo COMANDO
en el fichero, :NERDTree
y si queremos cerrar el navegador de ficheros que se acaba de abrir, ejecutamos :NERDTreeToggle
. Pero es un plugin que utilizaremos constantemente, por lo tanto vamos a mapear estos comandos de apertura y cierre en nuestro .vimrc
Mapeando apertura/cierre de NERDTree
Más adelante veremos más en detalle los mapeos en vim, pero para continuar con el manejo sencillos de NERDTree necesitamos añadir las siguientes líneas en el fichero de configuración.
" file: ".vimrc"
" Config NERDTree
nnoremap <C-n> :NERDTreeToggle<CR>
De este modo hemos mapeado que con la combinación de teclas <Control> + n
se ejecutará el comando :NERDTreeToggle
, el cual sirve para abrir y cerrar la funcionalidad de NERDTree
como explicábamos en el párrafo anterior.
TMUX/Navigator
Sirve para navegar entre pantallas. De modo que con NERDTree abrimos varios ficheros y TMUX nos ayuda a navegar entre NERDTree y los ficheros que se nos vayan abriendo en distintas pestañas.
Instalación
Una vez más, podemos seguir la documentación oficial , o repetir lo siguiente:
Añariemos la línea Plug 'christoome/vim-tmux-navigator'
. Guardamos, salimos y volvemos a entrar y ejecutamos :PlugInstall
.
Uso de TMUX
Ahora ya podemos abrir más ficheros desde NERDTree
con el comando s
(split a la derecha de NERDTree), y con la combinación <Control> + l
nos moveremos a la derecha, y con <Control> + h
hacia la izquierda. Es decir las teclas de dirección del propio vim
. Lo cual quiere decir que si hacemos split horizontal nos moveremos con <control>
+ j
o k
dependiendo si queremos ir hacia abajo o hacia arriba, respectivamente.
AutoPairs
Este plugin nos permite que al abrir comillas, paréntesis, llaves, corchetes, etc. Se genere automáticamente el par de cierre.
Instalación
Añariemos la línea Plug 'jiangmiao/auto-pairs'
. Guardamos, salimos y volvemos a entrar y ejecutamos :PlugInstall
No se requiere manual. Ahora simplemente siempre que abramos una archivo en vim, se autocompletarán las parejas de caracteres como "
,[]
,()
, etc.
Commentary
Plugin para comentar una o varias líneas con un simple comando.
Instalación
Añariemos la línea Plug 'tpope/vim-commentary'
. Guardamos, salimos y volvemos a entrar y ejecutamos :PlugInstall
Uso de Commentary
- Comentar/descomentar una línea: Nos situamos en la línea a comentar y en
modo Normal
pulsamos ->gcc
- Comentar/descomentar varias líneas: Seleccionamos el bloque de líneas a comentar con el
modo Visual
de Vim y pulsamos ->gc
Autocompletar código
Para perfilar completamente nuestro IDE con vim
utilizaremos el plugin neoclide/coc.vim
Es el plugin más pesado de los que llevamos instalados hasta el momento. Nos pedirá como requisito tener instalado nodejs
en nuestro sistema. Más adelante veremos el motivo
Instalación
Instalar el plugin pero esta vez añadiremos los siguiente a nuestro .vimrc
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Luego salimos y volvemos a entrar para ejecutar en modo Comando
: :PlugInstall
Añadir Language servers
En una sóla línea podemos installar varios servers, en función de los lenguajes que vayamos a utilizar
:CocInstall coc-json coc-tsserver coc-prettier coc-emmet
Hemos añadido los siguientes, además de los del comando anterior:
- Python: coc-pyright
- Markdown: coc-markdownlint
- css: coc-css
- bash: coc-sh
Es en la instalacióin de estos Language Servers donde se hace uso de nodejs
.
Anexos
Una vez hemos finalizado con la instalación de plugins y configuraciones nativas en el fichero de configuración, a continuación vamos a explicar otras funcionalidades que podemos añadir a nivel de .vimrc
.
Mapeos / atajos de teclado personalizados
Existen distintos tipos de mapeos en función del modo en el que queramos mapear:
- nmap: Mapeo de comandos en
modo Normal
. - nnoremap: Mapeo de comandos en
modo Normal
y ademas impide que se sobreescriba este mapeo (la adición de nore aplica al resto de modos). - imap: Mapeo de comandos en modo Interactivo.
- vmap: Mapeo de comandos en
modo Visual
.
Hemos añadido los siguientes mapeos a nuestro .vimrc
" file: ".vimrc"
nmap <C-s> :w<CR> " Guardar sin salir
nmap <C-m> :x<CR> " Guardar y salir
nmap <C-w> :q!<CR> " Salir sin guardar
nmap - dd " Borrar la línea en la que nos encontramos con un sólo `-`
AutoCommands
Utilizaremos la sentencia autocmd
para configurar comandos que se ejecutan sólos ante ciertos sucesos. Por ejemplo la siguiente lista de auto-comandos lo que hace es aplicar el formato correcto para cada extensión a través del prettier
que instalamos en el punto en el que hablábamos de los Language servers.
" file: ".vimrc"
" AutoCommands
autocmd BufWrite *.html :CocCommand prettier.formatFile " formateamos todos los ficheros .html antes de salir
autocmd BufWrite *.js :CocCommand prettier.formatFile " formateamos todos los ficheros .js antes de salir
autocmd BufWrite *.ts :CocCommand prettier.formatFile " formateamos todos los ficheros .ts antes de salir
autocmd BufWrite *.css :CocCommand prettier.formatFile " formateamos todos los ficheros .css antes de salir
autocmd BufWrite *.scss :CocCommand prettier.formatFile " formateamos todos los ficheros .scss antes de salir
autocmd BufWrite *.md :CocCommand prettier.formatFile " formateamos todos los ficheros .md antes de salir
autocmd BufWrite *.py :CocCommand prettier.formatFile " formateamos todos los ficheros .py antes de salir
Navegar entre archivos
Cuando abrimos varios ficheros, se nos genera una pestaña por cada uno de ellos. Para navegar dichas pestañas lo podemos hacer con los siguientes comandos: :bnext
y :bprev
. Esto es b de buffer, next para ir al siguiente buffer hacia la derecha y prev si nos queremos mover hacia la izquierda.
Como es bastante tedioso tener que escribir cada vez el comando deseado, cuando nos queramos mover entre archivos, vamos a mapear ambos en nuestro .vimrc
" file: ".vimrc"
nnoremap <C-p> :bprev<CR>
nnoremap <C-o> :bnext<CR>
Es decir con <Control> + p
nos movemos a previo y con la o
al siguiente.
Indentación
Hay una manera de indentar líneas de manera rápida. En modo Normal
, pulsando la combinación de teclas >>
añade un nivel de indentado a la línea. Para quitar un nivel de indentado usaremos las contrarias: <<
.
Sustituciones o abreviaciones
Al igual que con los mapeos con nmap
, podemos configurar combinaciones de teclas en modo Insertar
que serán sustituidas por cadenas más grandes con la sentencia iab
.
Por ejemplo, cuando queremos que un enlace en Markdown
se abra en una nueva pestaña debemos añadir a continuación lo siguiente: {:target="_blank"}
.
Una manera sencilla de ahorrarnos el tener que recordar esta texto, sería mediante la sustitución.
En nuestro .vimrc
podemos añadir la siguiente línea:
" file: ".vimrc"
" Sustituciones iab
iab _tb {:target="_blank"}
Vim en VSCode
Sólo con instalar la extensión vscodevim aplicará el los mapeos de .vimrc
que no se utilicen en VSCode de manera nativa, como por ejemplo “<Control> + c
” para copiar, o “<Control> + p
” para pegar texto.
Resultado final
Tras haber aplicado todos estos cambios en nuestra configuración de vim, nos ha quedado el siguiente fichero.
Recursos
Más sobre sustituciones y abreviaciones
Todos los enlaces a los Plugins
- Gestor de plugins: vim-plug
- Tabline: vim-airline
- Temas para airline: vim-airline-themes
- Explorador de archivos: NERDTree
- Navegador de pestañas/ventanas: TMUX/Navigator
- Autocompletar parejas: auto-pairs
- Añadir comentarios: commentary
- Ayuda con el ensalzado en diversos lenguajes de programación y marcado: Coc