Neovim, Instalación de Plugins
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:
Vim packages (administrador nativo)
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.
Instalando vim-plug
Vim-plug depende de git, si no lo tienes instalado, ejecuta el siguiente comando:
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
O si prefieres, descarga
este archivo
y guárdalo en ~/.local/share/nvim/site/autoload/plug.vim
.
Ahora abre tu archivo init.vim
.
Al inicio agrega lo siguiente:
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
.
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.
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
.
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.
NeoSolarized
Paleta de colores Solarized para Neovim.
Nova
Foto de Nova
Más
Explorador de archivos
NerdTree
Explorador de archivos, útil para ver la estructura de tu proyecto.
Plug 'scrooloose/nerdtree' ... let g:NERDTreeChDirMode = 2 " Cambia el directorio actual al nodo padre actual " Abrir/cerrar NERDTree con F2 map <F2> :NERDTreeToggle<CR>
-
:NERDTree
:h NERDTree
Barra de estado
Airline
Barra de estado, con integración con varios plugins y herramientas externas como git.
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)
:h airline
Más
Guías de indentación
IndentLine
Muestra los niveles de indentación con líneas verticales.
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:.*']
:h indentLine.txt
Más
Auto completado
Deoplete
Auto completado asíncrono para Neovim.
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
:h deoplete
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>'
h supertab
Echodoc
Muestra la firma de la función.
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
:h echodoc
Más
Snippets
Ultisnips
Provee porciones de código reusables.
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>'
:h UltiSnips
Analizador estático de código
ALE
Analizador estático asíncrono.
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%]'
-
:ALEFixSuggest
:ALEFix
:h ale.txt
Otros
Resaltado de sintaxis
Polyglot
Colección de varios plugins de resaltado de sintaxis.
Otros
Alternativamente puedes instalar un plugin específico para cada lenguaje. Por ejemplo:
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.
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>
-
:Files
:Buffers
:BLines
:Ag
:Colors
:h fzf-vim
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.
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
:h incsearch.txt
Utilidades
Surround
Facilita poner/quitar/cambiar comillas, paréntesis, tags, etc sobre un texto.
:h surround
Repeat
Repetir acciones de plugins con
.
.
Eunuch
Provee comandos de sistemas UNIX.
-
:Delete
:Move
:Rename
:Chmod
:Mkdir
:h eunuch
Auto-pairs
Inserta pares de comillas y paréntesis.
:h AutoPairs.txt
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
:h NERDCommenter
Git
Fugitive
Provee comandos de git.
-
:Gstatus
:Gcommit
:Gdiff
:h fugitive
Gitgutter
Muestra cambios hechos en el archivo en la columna de signos.
:h gitgutter.txt
Nerdtree git plugin
Muestra el estado de los archivos en Nerdtree.
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.
Documentación de Neovim
Lista de varios plugins que hacen uso de las características de Neovim.
Comments