¿Como Personalizar Neovim?

RMAG news

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>

2. Configurar el archivo init.vim

El archivo init.vim es donde configurarás Neovim. Primero, vamos a crear el archivo para personalizar nvim, en la ruta /home/.config/nvim/init.vim.

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.  

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

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()

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

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-tsserver o coc-prettier.
Para instalar Treesitter, escribe :TSInstall en Neovim, y luego escribe los nombres de los plugins que deseas instalar, como java o php.

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

Temas de colores para neovim:

gruvbox
onedark.vim
palenight.vim
nord-vim
ayu-vim

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

vim-airline
barbar.nvim:

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

nerdtree
nerdtree-git-plugin

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

vim-devicons
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. 

Aquí hay algunos ajustes básicos que puedes hacer para empezar:

4. Resultado

¿Cómo quedaría todo el archivo?

” ———————
” 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’

” 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 <Cs> :w<CR>
nmap <Cq> :q<CR>

” ALL TEXT, PASTE, COPY, RENDO, CUT
nmap <Cv>+P
nmap <Ca> ggVG
nmap <Cz> :undo<CR>
nmap <Cy> :redo<CR>
nmap <Cx> dd

” SEARCH AND REPLACE
nmap <Cr> :%s///gc<Left><Left>
nmap <Cf> /

” 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<Cw>>
nnoremap <Leader>< 10<Cw><

” 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>(easymotions2)

” DEFINITION.
nmap <silent> gd <Plug>(cocdefinition)
nmap <silent> gy <Plug>(coctypedefinition)
nmap <silent> gi <Plug>(cocimplementation)
nmap <silent> gr <Plug>(cocreferences)

” 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

augroup MyColors
autocmd!
autocmd ColorScheme dracula call DraculaTweaks()
autocmd ColorScheme * call TransparentBackground()
augroup END

color onedark

syntax on

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. Recuerda que siempre puedes buscar en línea para encontrar más ajustes y plugins avanzados. ¡Feliz programación!