:configuracion

Tanto Vim como Neovim permiten a los usuarios guardar sus configuraciones en un archivo. Se pueden crear archivos de configuración en formato .vim (VIMScript) o en formato .lua (Lua). En esos archivos se guardan los atajos de teclado personalizados, complementos, y las diferentes opciones que modifican el comportamiento del editor. En función del S.O. se guardan en:

Inicio de Neovim
Neovim totalmente "pelado", sin plugins, ni configuración ni ná

Formatos de configuración

A continuación vamos a ver diferentes formatos de configuración.

Formato VIMScript

Este formato se podría denominar “de legado”, ya que pertenece a la época de Vim. El formato de este archivo es .vim y cuya sintaxis es muy sencilla. En la parte de comandos hemos visto el comando :set que permite activar y asignar opciones, y que al guardarlo en un archivo permanecen al salir y arrancar Neovim.

" Opciones
set encoding="utf-8"
set conceallevel=2

" Atajos de teclado
nnoremap <silent> <C-s> :w<CR>

En el ejemplo anterior ha aparecido un comando nuevo llamado :nnoremap que nos permite crear un nuevo atajo de teclado para el modo Normal. Para los atajos del modo visual se usa el :vnoremap.

La sintáxis de dichos comandos es esta:

Al poner el <CR> al final le estamos indicando que ejecute esa acción y que pulse al Enter (también se denomina “retorno de carro”). El modificador opcional <silent> permite ejecutar la acción sin mostrar nada al usuario.

Formato Lua

Neovim reune lo bueno de Vi y Vim, pero le añade también la capacidad de ejecutar órdenes del lenguaje Lua. El formato del archivo es .lua, y si eres duch@ en este lenguaje, no tendrás problema en escribir una configuración en este formato.

-- Se declara la variable opt para "mapear" vim.opt
local opt = vim.opt
opt.conceallevel=2
opt.encoding='utf-8'

-- Atajos de teclado
vim.keymap.set("n", '<C-s>', ':w<cr>', {silent = true, desc = "Guardar cambios en el archivo"})

En la última línea hemos visto la forma de crear atajos de teclado usando vim.keymap.set(), que es una función, y dicha función cuenta con los siguientes argumentos (o parámetros):

Configuración monoarchivo / multiarchivo

La configuración de Neovim se puede guardar en uno o varios archivos. Guardar toda la configuración en un sólo archivo puede ser muy engorroso y muy poco intuitivo para los demás usuarios, y hay que saber organizar las secciones del mismo.

En cambio, guardar las configuraciones en varios archivos se podría denominar como modular, ya que cada archivo tiene un propósito diferente. Por ejemplo: podríamos tener un archivo con los atajos de teclado, otro con las opciones, otra con los plugins, etc…

Esta es la opción más recomendable para facilitar la depuración a la hora de crear una configuración para Neovim. Y de hecho, la gente que comparte sus configuraciones de Neovim (aka “dotfiles”) en GitHub/GitLab lo hace de esta manera.

Configuración multiarchivo con Lua

Si hemos decidido crear la configuración en formato .lua, podemos desarrollar una estructura de directorios muy interesante.

/lua/
  └─ plugins.lua
  └─ keys.lua
init.lua

En el archivo init.lua se guardarían las opciones. Pero además realiza una llamada a un archivo externo (o módulo) usando la función require(). Dentro de esa función se pone el archivo sin extensión.

Ejemplo:

-- Carga los archivos keys.lua y plugins.lua
require("keys")
require("plugins")

Vamos ahora a suponer que la estructura de directorios es tal que así:

/lua/
  └─ /plugins/
  │    └─ lazy.lua
  └─ keys.lua
init.lua

El único cambio que hay en el anterior ejemplo es que ahora hay un directorio, que es plugins y dentro hay un archivo, lazy.lua. Para llamar a ese archivo dentro del archivo de configuración hay que utilizar el require(), metiendo el nombre del directorio, un punto, seguido del nombre del archivo.

require("plugins.lazy")

Si se quitase el punto y el nombre del archivo, cargará todos los archivos que hay dentro de la carpeta plugins.

En definitiva, esta es la mejor manera de administrar la configuración de Neovim, ya que facilita su mantenimiento y diagnóstico.

Tecla líder

Una característica de Vim/Neovim es que podemos asignarle una tecla líder, que viene a ser lo mismo que la tecla Windows, o Comando de Mac. No se puede usar simultáneamente con otras teclas, sino que hay que tocar dicha tecla y luego una combinación.

A continuación veremos cómo se configura la tecla líder tanto en VIMScript como en Lua.

-- VIMScript
set g:mapleader = ","

-- Lua
vim.g.mapleader = ","

Una vez definida, ahora solo falta asignar unas cuantas combinaciones en ambos formatos.

-- VIMScript
nnoremap <silent> <leader>bd ":bdelete<CR>"

-- Lua
vim.keymap.set("n", "<leader>bd", ":bdelete<cr>", {silent=true})

En el ejemplo anterior hemos definido la tecla líder, seguida de “bd” para cerrar el búfer/archivo actual.

Opciones

Ahora que hemos visto todo lo esencial en cuanto a la configuración se refiere, vamos a pasar de lleno a la acción.

En la siguiente tabla se recogerán las diferentes opciones que permitirán al usuario modificar la apariencia y el comportamiento de Neovim. El listado completo de opciones se puede consultar con el comando :options.

OpciónDescripción
numberMuestra el número de cada línea
relativenumberMuestra el número relativo de cada línea
textwidthConfigura la longitud de letras en una línea
wrapPermite activar/desactivar el salto de línea
ignorecaseSe ignora si la ocurriencia está en mayúsculas o en minúsculas
hlsearchSe resaltan todas las ocurrencias de la búsqueda
confirmMuestra una confirmación antes de guardar los cambios
mouseConfigura el modo del ratón
tabstopNúmero de tabulaciones en la indentación
encodingCodificación del archivo
conceallevelOculta los asteríscos en la negrita y cursiva en los archivos Markdown
smartindentRealiza una indentación automática
expandtabUsa espaciado en vez de tabulaciones
termguicolorsActiva el soporte de color verdadero
colorscheme [esquema]Establece el esquema de colores para el editor
spellMuestra los errores ortográficos
spelllangEstablece el idioma de la ortografía
cursorlineResalta la línea donde está situado el cursor
swapfilePermite crear un archivo de intercambio

Hay algunas opciones que no tienen su variante en Lua, por lo que hay que usar vim.cmd("inserta aquí la opción") para poder usarlas en Lua.