Saltar al contenido principal

Cómo instalar plugins en Vim y Neovim

Vim y Neovim, como cualquier editor de textos, también tiene plugins, que añaden funcionalidad extra. El problema es que no tienen una interfaz visual, como por ejemplo la del Vscode 🚧, con la que buscar plugins e instalarlos fácilmente a golpe de ratón.

Lo que se suele usar para instalar los plugins, da igual la forma que uses, es git. Normalmente todos los plugins se van a instalar desde las url de los repos de git. La forma de actualizar es la que te imaginas, por debajo hace pull.

Recuerda pasarte por el artículo de Plugins interesantes para Vim y Neovim para descubrir plugins molones. La forma de instalar temas de color es la misma, aquí una lista de Temas de color recomendados para Vim 🚧

En Vim

Usando Plug

Es la opción que recomiendo para Vim. Lo bueno de este sistema es que descarga los plugins en paralelo, y además es muy simple añadir y quitar plugins.

Para instalarlo, si estás en un sistema Unix ejecuta:

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

Si estás en Windows, desde la powershell:

iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
    ni $HOME/vimfiles/autoload/plug.vim -Force

Una vez instalado plug tan solo te queda añadir los plugins que quieras al fichero .vimrc. La sintaxis es muy sencilla, solo tienes que poner la palabra Plug y entre comillas la url del repo de github del plugin, por ejemplo

call plug#begin()
 
Plug 'https://github.com/preservim/nerdtree'
Plug 'http://github.com/tpope/vim-fugitive.git'
 
call plug#end()

Ojo al detalle, es muy importante poner antes de todos los plugins call plug#begin() y después call plug#end()

Plug permite también poner los plugins sin tener que poner toda la url del repo, si es de Github puedes usar la sintaxis de usuario/nombre-repo, además puedes definir una rama o tag para usar en la descarga del plugin, por ejemplo:

Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

Por último, tras iniciar vim ejecuta el siguiente comando (en la barra de comandos):

:PlugInstall

Para actualizar los plugins ejecuta:

:PlugUpdate

Repositorio oficial de Plug

Usando submodules de git

Otra forma de instalar plugins es usando git a pelo, así no necesitas de gestor de plugins, simplemente haces update de todos los submodules de git.

Para empezar a instalar plugins de esta forma tan solo tienes que crear la carpeta .vim, dentro meter tu .vimrc y por último habilitar los submodules:

cd ~/.vim
cp ~/.vimrc vimrc
git init
git submodule init

Para instalar los plugins tienes que hacer clone a la carpeta pack/plugins/, por ejemplo:

git submodule add http://github.com/tpope/vim-fugitive.git pack/plugins/bundle/fugitive

En el momento en el que quieras actualizar los plugins tan solo tienes que hacer:

git submodule foreach --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch); git pull;

En Neovim

En neovim tienes que saber que puedes instalar los plugins de la misma forma que para Vim, pero normalmente, y por lo que he visto, la gente prefiere usar otros plugins ya que éstos están preparados para funcionar con lua.

Por ejemplo puedes usar Plug, pero eso va a requerir tener que configurar los plugins en el fichero .vimrc, cuando normalmente la gente que usa Neovim tiene su config en el fichero init.lua

Usando Packer

Este es uno de los gestores más conocidos para instalar plugins en Neovim. Es parecido a Plug en el sentido que instala los plugins en paralelo, y es tan fácil como indicar en un fichero la ruta al proyecto de Github del plugin que quieres instalar.

Pero tiene una diferencia clave, la posibilidad de cargar plugins de forma lazy (perezosa), es decir, puedes indicar bajo qué condiciones quieres que los plugins carguen, para que el arranque sea mucho más rápido y ligero.

Una vez instalado Packer* puedes empezar a instalar plugins, para ello, en el fichero ~/.config/nvim/lua/plugins.lua puedes escribir lo siguiente:

vim.cmd <span title='Este artículo todavía no ha sido escrito' class='invalid-link'>packadd packer.nvim 🚧</span>

return require('packer').startup(function(use)
  -- Packer lo tienes que declarar como un plugin más
  use 'wbthomason/packer.nvim'

  use 'tpope/vim-fugitive'

end)

Ojo al detalle de tener que declarar packer como plugin, esto se hace para poder actualizarse y que al instalar no intente desinstalarlo. En el ejemplo anterior he puesto un plugin, no hace falta poner la ruta completa de git, vale con el usuario/nombre-del-repo.

Añadir un tema de color se hace exactamente igual, por ejemplo:

use 'dracula/vim'

Lo siguiente que tienes que hacer es una llamada desde el fichero init.lua de la config de nvim para llamar a este fichero:

lua require('plugins')

Y entrar a nvim para ejecutar el comando de :PackerCompile y :PackerInstall, recuerda ejecutar estos comandos siempre que cambies o añadas un plugin a tu config.

Como he dicho antes, puedes configurar cada plugin para cargarlo de forma perezosa, pero sinceramente, nunca sé que hay que poner para cada plugin, y lo que hago es buscar el nombre del plugin en Github, filtrar por ficheros .lua y copiar de alguien su config para hacer lazy load del plugin, por ejemplo:

  use {'tpope/vim-dispatch', opt = true, cmd = {'Dispatch', 'Make', 'Focus', 'Start'}}

O por ejemplo una forma de ejecutar comandos tras la instalación de cada plugin (útil para configurar el tema de color tras instalarlo por ejemplo):

use {'iamcco/markdown-preview.nvim', run = 'cd app && yarn install', cmd = 'MarkdownPreview'}

Repositorio oficial de Packer

Usando lazy

Esta es una alternativa nueva que ha surgido a Packer, su funcionamiento es muy similar. He visto que mucha gente ha migrado de Packer a Lazy, aunque no entiendo por qué tanto hype.

Sí que es cierto que el popup que sale al ejecutar el comando de instalación es mucho más chulo que el de Packer, pero solo por eso hacer el cambio no merece la pena.

También he leído en reddit que el creador de Packer no está por la labor de mantener el proyecto y que por eso mucha gente se ha cambiado.

Instalar Lazy no requiere de lanzar un comando antes, simplemente añade este fichero a tu config de lua (init.lua o plugins.lua por ejemplo):

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end

Justo debajo añades la lista de plugins, por ejemplo para instalar este tema de color:

require('lazy').setup({
    { 'ellisonleao/gruvbox.nvim',
      config = function()
        vim.cmd('colorscheme gruvbox')
      end
    },
  })

Como ves, lazy también tiene una forma de ejecutar comandos tras la instalación de los plugins, y también tiene forma de cargarlos perezosamente.

Repositorio oficial de Lazy