Neovim, Instalación de Plugins

Logo de Neovim

Plugins

Los plugins de Vim/Neovim no son más que archivos .vim (vimscript [1]) o al menos la mayoría, ya que Neovim nos permite escribir plugins en cualquier lenguaje (plugins remotos [2]).

Los plugins permiten extender la funcionalidad de nuestro editor, integrarlo con herramientas externas, darle color (temas), o hasta proveer mappings que nos facilitan realizar ciertas acciones.

Administrador de plugins

Los archivos que conforman un plugin deben estar en directorios específicos para que este funcione. En los inicios de Vim, bastaba con copiar y pegar estos archivos en cada directorio (lo cual se puede seguir haciendo en Neovim), pero conforme tu lista de plugins crece, se hace difícil mantener al día todos los plugins.

Para solucionar este problema nacen los administradores de plugins, que se encargan de mantener los plugins y sus dependencias al día con un par de comandos y sin la necesidad de copiar cada archivo en cada directorio correspondiente.

Los administradores de plugins más populares son:

Todos a excepción de pathogen administran los plugins de manera similar, pones los nombres de los plugins en tu init.vim, ejecutas un comando y estos se descargan (usualmente desde GitHub) e instalan.

El administrador de plugins que usaré para el resto del post es vim-plug, porque es el que menos configuraciones requiere y se integra muy bien con Neovim. Puedes escoger el que desees, los plugins pueden ser instalados con cualquier administrador.

Nota

Si quieres saber más sobre la estructura de directorios de los plugins de Vim/Neovim puedes leer este gist.

Instalando vim-plug

Vim-plug depende de git, si no lo tienes instalado, ejecuta el siguiente comando:

# Ubuntu
sudo apt install git

# Fedora
sudo dnf install git

Para instalar vim-plug ejecuta el siguiente comando en la terminal:

curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Nota

Debes tener instalado curl previamente, instálalo en Ubuntu con sudo apt install curl, o en Fedora con sudo dnf install curl.

O si prefieres, descarga este archivo y guárdalo en ~/.local/share/nvim/site/autoload/plug.vim.

Ahora abre tu archivo init.vim.

nvim ~/.config/nvim/init.vim

Al inicio agrega lo siguiente:

" Directorio de plugins
call plug#begin('~/.local/share/nvim/plugged')

" Aquí irán los plugins a instalar

call plug#end()

" Luego de esta línea puedes agregar tus configuraciones y mappings

Instalando plugins con vim-plug

Vim-plug tiene soporte directo con plugins alojados en GitHub (pero también se puede instalar los que estén alojados en otros sitios, un repositorio git, o de manera local).

En este post usaré plugins alojados en GitHub, para instalarlos sólo basta con poner el nombre del usuario y del repositorio en el archivo init.vim.

Por ejemplo, para instalar este plugin, sólo se necesita agregar lo siguiente en el archivo init.vim.

call plug#begin('~/.local/share/nvim/plugged')

Plug 'tpope/vim-surround'  " Es buena idea agregar una descripción del plugin

call plug#end()

Pero con esto el plugin no está aún instalado, debes recargar tu init.vim ejecutando :so ~/.config/nvim/init.vim. Y luego, ejecuta :PlugInstall. Aparecerá una ventana con el progreso de instalación, cuando se termine de instalar el plugin, ciérrala presionando q.

Ejecución del comando ``:PlugInstall``

Ejecución del comando :PlugInstall

Ahora si, el plugin se encontrará instalado, si deseas deshabilitarlo, basta con comentar o eliminar esa línea. Pero esto no eliminará el plugin de tu disco, para hacerlo ejecuta el comando :PlugClean.

Es importante mantener tus plugins al día, sí que de vez en cuando ejecuta :PlugUpdate para actualizarlos.

Mantener al día tu administrador de plugins también es importante, puedes hacerlo con :PlugUpgrade.

Cómo usar y configurar los plugins

Cada plugin tiene su propia documentación y dependencias, asegúrate de leerlas, no hace falta hacerlo a profundidad. La mayoría provee en su página algunas configuraciones suficientes para comenzar a usarlo.

Si necesitas configurar algo específico, busca en su documentación (:h <nombre-del-plugin>). Si notas un error, asegúrate de estar usando la última versión (:PlugUpdate).

Las configuraciones de cada plugin van en tu init.vim luego de toda la lista de plugins. Al igual que las demás configuraciones, trata de ser organizado y documenta todo.

Plugins esenciales

A continuación describiré algunos plugins que considero esenciales para aumentar tu productividad, tu editor luzca bien y se asemeje a un IDE liviano.

Para cada plugin presentaré una breve descripción, su página, una lista de comandos y de ser el caso, algunas configuraciones necesarias para empezar a usarlo. Para ello usaré un init.vim abreviado de la siguiente manera.

Plug 'usuario/plugin'  " Comentario

...

let g:configuracion_del_plugin = 1

Recuerda que los nombres de los plugins deben ir entre las funciones de vim-plug, Y las configuraciones deben ir luego de call plug#end(). Y por si acaso, los ... son sólo un separador visual, no necesitas ponerlos en tu init.vim.

Advertencia

No instales cada plugin que veas en este post, lee con cuidado su descripción y toma los que realmente vayas a utilizar o crees que mejoren tu productividad.

Temas

Dentro de los plugins tenemos color schemes, o temas para tu Neovim.

One Dark

Color scheme inspirado por el tema One Dark de Atom.
One Dark

One Dark

Plug 'joshdick/onedark.vim'

...

set termguicolors  " Activa true colors en la terminal
colorscheme onedark  " Activa tema onedark

NeoSolarized

Paleta de colores Solarized para Neovim.
NeoSolarized light

NeoSolarized light

NeoSolarized dark

NeoSolarized dark

Plug 'iCyMind/NeoSolarized'

...

set termguicolors  " Activa true colors en la terminal
set background=dark  " Fondo del tema: dark/light
colorscheme NeoSolarized  " Activa tema NeoSolarized

Nova

Foto de Nova

Explorador de archivos

NerdTree

Explorador de archivos, útil para ver la estructura de tu proyecto.
NERDTree

NERDTree

Plug 'scrooloose/nerdtree'

...

let g:NERDTreeChDirMode = 2  " Cambia el directorio actual al nodo padre actual

" Abrir/cerrar NERDTree con F2
map <F2> :NERDTreeToggle<CR>

Nota

Para cambiar entre ventanas (NERDTree y tu buffer actual) presiona Ctrl + ww.

Barra de estado

Airline

Barra de estado, con integración con varios plugins y herramientas externas como git.
Airline

Airline

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'  " Temas para airline

...

let g:airline#extensions#tabline#enabled = 1  " Mostrar buffers abiertos (como pestañas)
let g:airline#extensions#tabline#fnamemod = ':t'  " Mostrar sólo el nombre del archivo

" Cargar fuente Powerline y símbolos (ver nota)
let g:airline_powerline_fonts = 1

set noshowmode  " No mostrar el modo actual (ya lo muestra la barra de estado)

Nota

Para que tu barra de estado luzca como en la imagen, necesitas hacer uso de la fuente Powerline, puedes instalar una de estas fuentes (recomiendo esta) y seleccionarla en las configuraciones de tu terminal.

Guías de indentación

IndentLine

Muestra los niveles de indentación con líneas verticales.
IndentLine

IndentLine

Plug 'Yggdroot/indentLine'

...

" No mostrar en ciertos tipos de buffers y archivos
let g:indentLine_fileTypeExclude = ['text', 'sh', 'help', 'terminal']
let g:indentLine_bufNameExclude = ['NERD_tree.*', 'term:.*']

Auto completado

Deoplete

Auto completado asíncrono para Neovim.
Deoplete

Deoplete

Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'Shougo/neco-syntax'  " Fuente general de auto completado

...

" Activar deoplete al iniciar Neovim
let g:deoplete#enable_at_startup = 1

" Cerrar automaticamente la ventana de vista previa (donde se muestra documentación, si existe)
augroup deopleteCompleteDoneAu
  autocmd!
  autocmd CompleteDone * silent! pclose!
augroup END

Nota

Para tener auto completado para un leguaje específico debes instalar una fuente, puedes encontrar una lista de varias fuentes aquí.

Supertab

Permite navegar entre las sugerencias de deoplete usando Tab.
Plug 'ervandew/supertab'

...

" Invertir direccion de navegacion (de arriba a abajo)
let g:SuperTabDefaultCompletionType = '<c-n>'

Echodoc

Muestra la firma de la función.
echodoc

echodoc

Plug 'Shougo/echodoc.vim'

...

set noshowmode  " No mostrar el modo actual (echodoc hace uso de este espacio)

" Activar echodoc al iniciar Neovim
let g:echodoc_enable_at_startup = 1

Snippets

Ultisnips

Provee porciones de código reusables.
Ultisnips

Ultisnips

Plug 'sirver/ultisnips'
Plug 'honza/vim-snippets'

...

" Expandir snippet con Ctrl + j
let g:UltiSnipsExpandTrigger = '<c-j>'

" Ir a siguiente ubicacion con Ctrl + j
let g:UltiSnipsJumpForwardTrigger = '<c-j>'
" Ir a anterior ubicacion con Ctrl + k
let g:UltiSnipsJumpBackwardTrigger = '<c-k>'

Analizador estático de código

ALE

Analizador estático asíncrono.
ALE

ALE

Plug 'w0rp/ale'

...

" Mostrar mejor mensajes de error
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'

Resaltado de sintaxis

Polyglot

Colección de varios plugins de resaltado de sintaxis.
Plug 'sheerun/vim-polyglot'

Otros

Alternativamente puedes instalar un plugin específico para cada lenguaje. Por ejemplo:

Plug 'hail2u/vim-css3-syntax', { 'for': 'css' }
Plug 'othree/html5.vim', { 'for': 'html' }
Plug 'pangloss/vim-javascript', { 'for': 'javascript' }
Plug 'plasticboy/vim-markdown', { 'for': 'markdown' }

Ir a definición

Varios IDEs ofrecen la funcionalidad de "ir a definición" (go to ...). Neovim también lo hace, y para ello almacena un índice de identificadores con su localización en un archivo tag.

Ir a definición de la palabra sobre el cursor:

  • Ctrl + ]
  • Ctrl + click izquierdo

Para generar este archivo haremos uso de un programa llamado ctags.

# Instalar en ctags en Ubuntu
sudo apt install exuberant-ctags

# Instalar ctags en Fedora
sudo dnf install ctags

Lista de lenguajes soportados por ``ctags` <http://ctags.sourceforge.net/languages.html>`_. Si tu lenguaje no está en la lista, hay varios plugins que ofrecen esta funcionalidad a modo de funciones, como tern for vim, jedi-vim.

Nota

Puedes leer más sobre los archivos tag y vim aquí

Advertencia

Neovim no genera este archivo de manera automática, sólo se encarga de leerlo, pero existen plugins que nos facilitan esta tarea.

Gutentags

Administrador de archivos tag.
Plug 'ludovicchabant/vim-gutentags'

...

" Nombre del archivo generado
let g:gutentags_ctags_tagfile = '.tags'

Buscador de archivos

FZF

Wrapper de FZF buscador de archivos, buffers, grep, etc.
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

...

" Ejecutar comandos con alt-enter :Commands
let g:fzf_commands_expect = 'alt-enter'
" Guardar historial de búsquedas
let g:fzf_history_dir = '~/.local/share/fzf-history'

" Empezar a buscar presionando Ctrl + p
nnoremap <C-p> :Files<CR>

CtrlP

Buscador de archivos y buffers.
Plug 'ctrlpvim/ctrlp.vim'

...

" Archivos ignorados
set wildignore+=*/tmp/*,*.so,*.swp,*.zip
let g:ctrlp_custom_ignore = {
  \ 'dir':  '\v[\/](\.(git|hg|svn)|node_modules)$',
  \ 'file': '\v\.(exe|so|dll)$',
  \ }

" Ignorar archivos en .gitignore
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']

Búsqueda

Incsearch

Búsqueda incremental mejorada.
incsearch

incsearch

Plug 'haya14busa/incsearch.vim'

...

" Maps requeridos
map /  <Plug>(incsearch-forward)
map ?  <Plug>(incsearch-backward)

" Quitar resaltado luego de buscar
let g:incsearch#auto_nohlsearch = 1

Utilidades

Surround

Facilita poner/quitar/cambiar comillas, paréntesis, tags, etc sobre un texto.
Plug 'tpope/vim-surround'

Repeat

Repetir acciones de plugins con ..
Plug 'tpope/vim-repeat'

Eunuch

Provee comandos de sistemas UNIX.
Plug 'tpope/vim-eunuch'

Auto-pairs

Inserta pares de comillas y paréntesis.
Plug 'jiangmiao/auto-pairs'

Nerdcommenter

Facilita agregar y quitar comentarios.
Plug 'scrooloose/nerdcommenter'

...

let g:NERDSpaceDelims = 1  " Agregar un espacio después del delimitador del comentario
let g:NERDTrimTrailingWhitespace = 1  " Quitar espacios al quitar comentario

Git

Fugitive

Provee comandos de git.
Plug 'tpope/vim-fugitive'

Gitgutter

Muestra cambios hechos en el archivo en la columna de signos.
incsearch

incsearch

Plug 'airblade/vim-gitgutter'

...

" Actualizar barra cada 250 mili segundos
set updatetime=250

Nerdtree git plugin

Muestra el estado de los archivos en Nerdtree.
nerdtree git plugin

Nerdtree git plugin

Plug 'xuyuanp/nerdtree-git-plugin'

Buscando plugins

No existe un repositorio oficial de plugins para Neovim, por lo que hace que la búsqueda de nuevos plugins (bien mantenidos y sin errores) sea un poco difícil.

GitHub

Como habrás observado, la mayoría de plugins están alojados en GitHub, así que es un buen lugar para buscar.

Trata de buscar repositorios con la palabra vim, neovim, nvim o que terminen en .vim (los que son sólo compatibles con Neovim tienen la extensión .nvim).

Dotfiles

Otra manera de buscar plugins es buscando en los dotfiles de varios usuarios (mis dotfiles).

Vim awesome

Colección de plugins más usados. Ten en cuenta que la mayor parte (todos en realidad) son plugins para Vim, así que tal vez no encuentres mejores alternativas para Neovim.

Comments

Comments powered by Disqus