Vitaminas para Vim: Plugins, resaltado de color y autocompletado

Hace un tiempo os hablé de cómo instalar la última versión de Vim en Linux y de sus ventajas frente al clásico vi. Sin embargo, si usáis Vim recién instalado de serie para vuestros proyectos o para scripts del día a día, seguro que habéis notado que se queda un poco desfasado en comparación con un IDE moderno: falta un autocompletado, un resaltado de sintaxis vistoso o navegación ágil por archivos, por poner algunos ejemplos

En esta entrada voy a ir directo al grano: vamos a ver cómo instalar un gestor de plugins ligero (vim-plug), cómo ponerle un tema de color decente y cómo configurar autocompletado IntelliSense para lenguajes como Python y C usando coc.nvim

Al final de la entrada os dejaré un par de archivos de prueba para que lo testeéis vosotros mismos y podáis ver la magia en directo. ¡Vamos a ello!

Logo oficial de Vim

Un gestor de plugins: vim-plug

Para no volvernos locos gestionando carpetas a mano, lo ideal es usar un gestor de plugins. Mi recomendación personal por ligereza y sencillez es vim-plug

Para instalarlo en GNU/Linux (Debian, Ubuntu, CentOS, Rocky Linux, Arch, etc.), tan solo abrimos la terminal y ejecutamos este curl

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Con esto ya tenemos listo el motor. Ahora solo nos falta indicarle en nuestro archivo de configuración ~/.vimrc qué plugins queremos cargar.

Resaltado de sintaxis y tema visual

Para no dejarte los ojos con los colores por defecto del terminal, vamos a instalar un paquete de resaltado para cientos de lenguajes (vim-polyglot), un tema muy elegante inspirado en Atom (onedark.vim) y una barra de estado informativa (vim-airline).

Abre (o crea) el archivo ~/.vimrc:

vim ~/.vimrc

¿Vim abriendo el fichero de configuración de vim, para modificar vim, madre mía, eso creará una paradoja espacio temporal?

Ahora, dentro del fichero, escribimos:

"" --- INICIO DE PLUGINS ---
call plug#begin('~/.vim/plugged')
 
"" Resaltado de sintaxis y colores
Plug 'sheerun/vim-polyglot'
Plug 'joshdick/onedark.vim'
Plug 'vim-airline/vim-airline'
 
call plug#end()
" --- FIN DE PLUGINS ---
 
" Configuración básica de UI
syntax on
set number
set termguicolors
colorscheme onedark
let g:airline_powerline_fonts = 1

Guardamos y salimos

Ahora la primera que entremos a vim, nos dará algún mensaje de error, esto es normal, porque falta instalar los plugins.

Al acceder a vim, escribimos «:» y luego: «PluginInstall«, de esta manera se instalarán los plugins que hemos indicado en el fichero de configuración.

Autocompletado inteligente con CoC (Conquer of Completion)

Para lograr un autocompletado al estilo VS Code pero dentro de Vim, la mejor opción hoy en día es coc.nvim Funciona mediante Language Server Protocol (LSP), lo que significa que analiza el código en tiempo real, detecta errores y ofrece sugerencias reales (no solo palabras repetidas del archivo).

Requisito previo

coc.nvim necesita Node.js (versión 16 o superior). Puedes instalarlo desde el gestor de paquetes de tu distro:

# En Debian / Ubuntu / Mint
sudo apt update 
sudo apt install -y nodejs npm
# En RHEL / Rocky Linux / Fedora
sudo dnf install -y nodejs npm
# En Arch Linux
sudo pacman -S nodejs npm

Instalar última versión de Vim

Puede que en nuestro sistema no tengamos la última versión de vim, para solventarlo, podemos usar las fuentes oficiales y compilar, así:

#Instalar dependencias de compilación
sudo dnf install -y gcc make ncurses-devel git   # En RHEL/Rocky/CentOS
sudo apt install -y build-essential libncurses-dev git  # En Debian/Ubuntu
#Clonar el repositorio oficial de Vim
git clone https://github.com/vim/vim.git /tmp/vim
cd /tmp/vim
#Compilar e instalar en /usr/local
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install

Ahora quedará vim, en la última versión en la ruta /usr/local/bin/vim

Podemos añadir un alias, para utilizar por defecto esa versión y no la que viene en el sistema. Para que sea solo para nuestro usuario, añadimos al final de ~/.bashrc, justo al final:

alias vim='/usr/local/bin/vim'

Guardamos y salimos. Si queremos que afecte a todos los usuarios, debemos hacer lo mismo, pero al final del fichero /etc/bashrc

Añadir coc.nvim a ~/.vimrc

Modificamos el archivo ~/.vimrc para añadir el plugin y la configuración básica de teclado (para aceptar la sugerencia con la tecla Enter o movernos con Tab):

Contenido de .vimrc

Instalar los servidores de lenguaje (Language Servers)

Una vez guardado el ~/.vimrc, abrimos Vim e instalamos los plugins ejecutando:

:PlugInstall

Verás una pantalla dividida instalando todo automáticamente. Cuando termine, ejecuta dentro de Vim los siguientes comandos para dar soporte a Python y C/C++:

#Para Python
:CocInstall coc-pyright
#Para C o C++
:CocInstall coc-clangd
#Si trabajas con Kubernetes o Docker está es buenísima para los yaml
:CocInstall coc-yaml

¡IMPORTANTE!, si al instalar te aparece el error: «coc-pyright crypto is not defined «, es un problema de la versión de NodeJS.

Para solventarlo:

export NODE_OPTIONS="--experimental-global-webcrypto"

Para que quede de forma permanente, lo debemos añadir en ~/.bashrc

Nota: Para C/C++ es recomendable tener instalado clangd en el sistema con sudo apt install clangd o el equivalente en tu distro

El archivo ~/.vimrc definitivo (Listo para usar)

Para hacértelo todavía más fácil, aquí tienes la configuración unificada de ~/.vimrc.
Os lo pongo en un pantallazo, porque WordPress se vuelve un poco loco al meter estos códigos y no interpreta bien los caracteres:

Contenido .vimrc ampliado

Algunos ejemplo de prueba

Para que podáis ver cómo queda, os dejo algunos pantallazos.

Ejemplo de python

El código en Python

import os
 
def saludar_usuario(nombre: str) ->: None:
    print(f"Hola {nombre}, bienvenido a Ochobits hacen un byte")
 
if __name__ == "__main__":
    # Prueba escribir 'os.p' o 'sys.' aquí para ver el autocompletado de coc-pyright
    direct = os.path
    saludar_usuario("Lector")

Al escribir os.path. o sys., se debería desplegar el menú emergente con las funciones disponibles y sus tipos de retorno.

Ejemplo de la ayuda al añadir un librería para Python

Una vez finalizado, quedaría así:

Código en Python ya finalizado

Ejemplo de C

El código en C

#include <stdio.h>
#include <string.h>
 
struct Servidor {
    char ip[16];
    int puerto;
};
 
int main() {
    struct Servidor s1;
    strcpy(s1.ip, "10.10.100.1");
    s1.puerto = 8080;
 
    printf("Conectando a %s:%d\n", s1.ip, s1.puerto);
 
    return 0;
}

Al escribir s1. saldrán los miembros de la estructura (ip, puerto), y al escribir printf, verás los tipos de argumentos exigidos. También puedes pulsar Ctrl+N para capturar el árbol de directorios lateral de NERDTree.

Quedaría así:

Así quedaría el código escrito en C

Resumen y conclusión

Con estos sencillos pasos hemos transformado Vim en una herramienta ágil y moderna, manteniendo toda la velocidad de la terminal sin renunciar a las comodidades del autocompletado y una estética cuidada.

¿Qué os parece? ¿Usáis otros plugins o preferís mantenerlo aún más simple? Podéis dejar vuestra opinión en los comentarios.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.