DEV Community

Cover image for ¿Como Personalizar Neovim?
Erick Vasquez
Erick Vasquez

Posted on • Updated on

¿Como Personalizar Neovim?

Personalizar Neovim es una excelente manera de mejorar la productividad y la experiencia al programar. A continuación, te proporcionaré una guía para personalizar Neovim para personas que se están iniciando en este tema.

Cabe destacar que utilizaremos un único archivo para configurar Neovim, el cual es el init.vim. Pero existen otras formas un poco más complejas, como personalizarlo con Lua, el cual es un lenguaje de programación. 

1. Instalar un administrador de plugins

Antes de comenzar, asegúrate de tener Neovim instalado en tu computadora. Puedes descargarlo desde el repositorio oficial de Neovim. Nosotros usaremos a partir de la versión v0.8.0.

Para personalizar Neovim, necesitarás un administrador de plugins. Un administrador de plugins te permite instalar y administrar plugins de forma sencilla. Hay varios administradores de plugins disponibles, pero el más popular es vim-plug.

Para instalar vim-plug, abre una terminal y ejecuta el siguiente comando:

curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \\
    <https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim>
Enter fullscreen mode Exit fullscreen mode

2. Configurar el archivo init.vim

El archivo init.vim es donde configurarás Neovim. Primero, vamos a crear el archivo para personalizar nvim. Si usas un OS Unix la ruta es /home/.config/nvim/init.vim. Si tu OS es Windows, la ruta es User/NameUser/AppData/Local/nvim

En este archivo se estara organizado en tres secciones:

- Configuración principal: aquí se configuran algunas opciones importantes como el soporte de resaltado de sintaxis, el soporte de la opción de autocompletado y la configuración de los colores. 

- Configuración de complementos: aquí se definen y se cargan todos los complementos que se emplearán en Neovim. 

- Configuración personalizada: esta sección contiene opciones personalizadas y mapeos de teclas. Los mapeos de teclas se emplean para definir atajos para hacer tareas específicas en Neovim, como guardar archivos, buscar y reemplazar, abrir pestañas y cargar de nuevo el archivo init.vim.

2.1 Fuente

Personalmente recomiendo instalar la fuente JetbrainsMono. Sin embargo, si deseas otra fuente, puedes ingresar a la página oficial de NerdFonts y descargar tu favorita. A mí me gusta Hack Nerd Font o Fira Code. Es importante que sea NerdFont, ya que, gracias a este tipo de fuentes, es que podremos ver los iconos en Neovim.

Una vez instales la fuente, procura que la terminal que usas, utilice la fuente que descargaste.  

Ejemplo en Windows

Windows

Ejemplo en Linux

Linux

2.2 Configuración

1. Habilitar el número de línea
El número de línea es útil cuando necesitas referirte a una línea específica en tu archivo. Puedes habilitar los números de línea usando el siguiente código:
set number

2. Establecer el espaciado
El espaciado adecuado ayuda a que el código sea más legible. Puedes establecer el espaciado en Neovim con el siguiente código:

set tabstop=4
set shiftwidth=4
set expandtab
Enter fullscreen mode Exit fullscreen mode

3. Habilitar la indentación automática
La indentación automática es útil porque te permite identar tu código de forma rápida y sencilla. Puedes habilitar la indentación automática usando el siguiente código: filetype indent on

4. Temas
Un tema define la apariencia de Neovim. Puedes elegir entre una amplia variedad de temas, y algunos de los más populares incluyen gruvbox, dracula y nord.
Puedes instalar y establecer un tema usando vim-plug con el siguiente código:

syntax enable
set background=dark
colorscheme gruvbox
call plug#begin()
Plug 'morhetz/gruvbox'
call plug#end()
Enter fullscreen mode Exit fullscreen mode

5. Instalar plugins
Una vez que hayas configurado tu archivo init.vim, puedes instalar plugins usando vim-plug. Puedes buscar plugins en sitios como vimawesome y agregarlos a tu archivo init.vim utilizando Plug 'autor/nombre_del_plugin'.

filetype plugin indent on

Una vez que hayas agregado tus plugins, puedes instalarlos y actualizarlos usando los siguientes comandos en Neovim:

:PlugInstall
:PlugUpdate
Enter fullscreen mode Exit fullscreen mode

3. Algunos plugins

Coc y Treesitter: es un plugin que proporciona funciones avanzadas de autocompletado y corrección de código para varios lenguajes de programación. Treesitter es un plugin que proporciona análisis sintáctico avanzado para una gran cantidad de lenguajes de programación.

Para instalar Coc, abre Neovim y escribe :CocInstall. A continuación, escribe los nombres de los plugins que deseas instalar, como:

  • coc-emmet
  • coc-html-css-support
  • coc-pairs
  • coc-json
  • coc-tsserver
  • coc-prettier
  • @yaegassy/coc-volar
  • @yaegassy/coc-volar-tools
  • @yaegassy/coc-tailwindcss3

Para instalar Treesitter, escribe :TSInstall en Neovim, y luego escribe los nombres de los plugins que deseas instalar, como:

  • astro
  • java
  • javascript
  • json
  • markdown
  • php

Algunas de las opciones y los plugin más notables que se configuran son:

Temas de colores para neovim:

  1. gruvbox
  2. onedark.vim
  3. palenight.vim
  4. nord-vim
  5. ayu-vim

Plugin para mejorar la apariencia de la barra de estado de neovim:

  1. vim-airline
  2. barbar.nvim:

Plugin para explorar y navegar por los archivos en un árbol de directorios:

  1. nerdtree
  2. nerdtree-git-plugin

Plugin para mostrar iconos de archivo en la barra lateral de NERDTree:

  1. vim-devicons
  2. nvim-web-devicons:

Otro Pluggins usados son:

1. vim-closetag: para autocompletar etiquetas HTML y XML.
2. vim-surround: para agregar y cambiar los paréntesis, corchetes, llaves y comillas que rodean el texto seleccionado.
3. nvim-autopairs: para insertar pares de paréntesis, corchetes, llaves y comillas automáticamente mientras se escribe código.
4. vim-prettier: para formatear automáticamente el código JavaScript, CSS, HTML y otros lenguajes.
5. coc.nvim: plugin para autocompletar y proporcionar características avanzadas de edición de código para varios lenguajes de programación a través del servidor LSP.
6. nvim-treesitter: para un resaltado de sintaxis y análisis de código más avanzados, basado en árboles sintácticos, para muchos lenguajes de programación.
7. lilydjwg/colorizer: para resaltar los códigos de color en el archivo.
8. rainbow_parentheses.vim: para resaltar los paréntesis y corchetes coincidentes.
9. telescope.nvim: para buscar palabras claves. 

4. Comandos personalizados

Puedes crear comandos personalizados para diversas acciones. Por ejemplo, si deseas guardar tus cambios como en Windows (Ctrl + S), puedes hacerlo de la siguiente manera:

  • Primero, define un comando para la 'tecla líder' (leader key), que es la tecla principal para ejecutar comandos. En mi caso, utilizo la barra espaciadora (space).
  • Luego, utiliza el comando de Vim nmap COMANDO_VIM.
  • Por ejemplo, si deseas que Ctrl + S guarde tu trabajo, el comando sería: nmap <C-s> :w<CR>, donde C representa la tecla Ctrl, s es la tecla S, y :w es el comando de Vim para guardar el archivo. Al final del post encontrarás más ejemplos.
let mapleader=" "

" SAVE
nmap <C-s> :w<CR>
nmap <C-q> :q<CR>

" SPLIT S
nmap <Leader>s :vsp<CR>
Enter fullscreen mode Exit fullscreen mode

5. Ejemplo de configuración

Para tener el tema transparente, la terminal debe tener el tema transparente. En mi configuración ya viene por defecto en tema transparente en Neovim.
Nvim transparente

Nvim

¿Cómo quedaría todo el archivo?

Puedes ver toda la configuración en mi repositorio de GitHub: dotfiles

" ---------------------
" 1. MAIN CONFIGURATION
" ---------------------
filetype plugin indent on
filetype plugin on
set termguicolors
set number
set mouse=a
set numberwidth=1
set clipboard=unnamed
set showcmd
set ruler
set cursorline
set encoding=utf8
set showmatch
set termguicolors
set sw=2
set wrap linebreak
set hlsearch                   
set incsearch                   
set ignorecase                  
set smartcase 
set laststatus=2
set noshowmode

" ------------
" 2. VIM-PLUG
" ------------
call plug#begin()

" THEME
Plug 'morhetz/gruvbox'
Plug 'joshdick/onedark.vim'
Plug 'drewtempelmeyer/palenight.vim'
Plug 'arcticicestudio/nord-vim'
Plug 'ayu-theme/ayu-vim'
Plug 'NLKNguyen/papercolor-theme'

" TABS
Plug 'vim-airline/vim-airline'
Plug 'romgrk/barbar.nvim'

" TREE
Plug 'scrooloose/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'

" ICONS
Plug 'ryanoasis/vim-devicons' 
Plug 'kyazdani42/nvim-web-devicons'

" TYPING
Plug 'alvan/vim-closetag'
Plug 'tpope/vim-surround'
Plug 'windwp/nvim-autopairs'

" PRETTIER
Plug 'prettier/vim-prettier', { 'do': 'yarn install' }

" AUTOCOMPLETE
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" SYNTAX
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}

" COLORS
Plug 'lilydjwg/colorizer'
Plug 'junegunn/rainbow_parentheses.vim'

" TELESCOPE
Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.0' }

" GIT
Plug 'APZelos/blamer.nvim'

" GITHUBCOPILOT
Plug 'github/copilot.vim'

" IDE
Plug 'numToStr/Comment.nvim'
Plug 'easymotion/vim-easymotion'
Plug 'mhinz/vim-signify'
Plug 'yggdroot/indentline'
Plug 'lukas-reineke/indent-blankline.nvim'

" LSP AND MASON
Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
Plug 'neovim/nvim-lspconfig'


call plug#end()

" -----------------
" 3. CONFIGURATION
" -----------------
" AYU THEME
" let ayucolor="dark" 

" MASON VIM
lua require('mason').setup()
lua require('mason-lspconfig').setup()

" GIT BLAME
let g:blamer_enabled = 1

" NERDTree
let NERDTreeQuitOnOpen=1
let g:NERDTreeGitStatusIndicatorMapCustom = {
                \ 'Modified'  :'✹',
                \ 'Staged'    :'✚',
                \ 'Untracked' :'✭',
                \ 'Renamed'   :'➜',
                \ 'Unmerged'  :'═',
                \ 'Deleted'   :'✖',
                \ 'Dirty'     :'✗',
                \ 'Ignored'   :'☒',
                \ 'Clean'     :'✔︎',
                \ 'Unknown'   :'?',
                \ }

let g:NERDTreeGitStatusUseNerdFonts = 1 
let NERDTreeMinimalUI = 1
let NERDTreeDirArrows = 1
let NERDTreeShowHidden = 1

" AIRLINE
let g:airline#extensions#tabline#enabled = 0
let g:airline_section_c_only_filename = 1
let g:airline_section_z = ' %{strftime("%-I:%M %p")}'
let g:airline_section_warning = ''
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline_theme = "onedark"

" PRETTIER
let g:prettier#quickfix_enabled = 0
autocmd TextChanged,InsertLeave *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.svelte,*.yaml,*.html PrettierAsync

"------------------
" 4. CUSTOM MAPING
"-----------------
let mapleader=" "

" SAVE
nmap <C-s> :w<CR>
nmap <C-q> :q<CR>

" ALL TEXT, PASTE, COPY, RENDO, CUT
nmap <C-v> "+P
nmap <C-a> ggVG
nmap <C-z> :undo<CR>
nmap <C-y> :redo<CR>
nmap <C-x> dd

" SEARCH AND REPLACE
nmap <C-r> :%s///gc<Left><Left>
nmap <C-f> / 

" SPLIT S
nmap <Leader>s :vsp<CR>

" INIT.VIM
nmap <leader>r :so ~/.config/nvim/init.vim<CR>

" BUFFERS
nmap <Leader>qq :NERDTreeToggle<CR>
nmap \\ <leader>qq
nmap <Tab> :bnext<CR>
nmap <Leader>t :enew<CR>
nmap <Leader>oo :Buffers<CR>
nnoremap <Leader>q :bdelete<CR>

" SPLIT
nnoremap <Leader>> 10<C-w>>
nnoremap <Leader>< 10<C-w><

" SEARCH FILES
nnoremap <leader>ff <cmd>Telescope find_files<cr>
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
nnoremap <leader>fc <cmd>Telescope colorscheme<cr>

" SCROOLLING
nnoremap <silent> <right> :vertical resize +5<CR>
nnoremap <silent> <left> :vertical resize -5<CR>
nnoremap <silent> <up> :resize +5<CR>
nnoremap <silent> <down> :resize -5<CR>

nmap <Leader>es <Plug>(easymotion-s2)

" DEFINITION.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

" PRETTIER
nmap <Leader>p :Prettier<CR>

" THEME TRANSPARENT
function! TransparentBackground()
    highlight Normal guibg=NONE ctermbg=NONE
    highlight LineNr guibg=NONE ctermbg=NONE
    set fillchars+=vert:\│
    highlight WinSeparator gui=NONE guibg=NONE guifg=#444444 cterm=NONE ctermbg=NONE ctermfg=gray
    highlight VertSplit gui=NONE guibg=NONE guifg=#444444 cterm=NONE ctermbg=NONE ctermfg=gray
endfunction

" Para desactivar el tema TransparentBackground solo hay que cambiarlo por set background dark o ligth
augroup MyColors
    autocmd!
    autocmd ColorScheme dracula call DraculaTweaks()
    autocmd ColorScheme * call TransparentBackground() 
augroup END

color onedark

syntax on
Enter fullscreen mode Exit fullscreen mode

Conclusión

Personalizar Neovim es una excelente manera de mejorar la productividad y la experiencia al programar. Con estas configuraciones básicas, podrás comenzar a personalizar Neovim según tus necesidades y preferencias. ¡Feliz programación!

Top comments (0)