Saltar al contenido principal

111. Plugins esenciales: gestores y primeros plugins 🔌

¿Por qué usar plugins?

Vim por sí solo es muy poderoso, pero los plugins lo transforman en una herramienta de desarrollo moderna. Los plugins te permiten añadir funcionalidades sin comprometer la filosofía minimalista de Vim.

🚀 Plugin Manager: vim-plug

¿Por qué vim-plug?

  • Simple: Una sola línea para instalar plugins
  • Rápido: Instalación en paralelo
  • Confiable: Funciona en Vim y Neovim
  • Popular: Gran comunidad y soporte

Instalación de vim-plug

Linux/macOS:

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

Windows (PowerShell):

iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force

Configuración básica en .vimrc

" ===================================================================
" CONFIGURACIÓN DE PLUGINS CON VIM-PLUG
" ===================================================================

" Inicializar vim-plug
call plug#begin('~/.vim/plugged')

" Aquí van los plugins (los veremos abajo)

" Finalizar configuración de plugins
call plug#end()

Comandos básicos de vim-plug

ComandoAcciónCuándo usar
:PlugInstallInstalar plugins nuevosDespués de añadir plugin
:PlugUpdateActualizar pluginsMantenimiento semanal
:PlugCleanEliminar plugins no usadosLimpieza
:PlugStatusVer estado de pluginsDebug

🎨 Plugins esenciales para empezar

1. NERDTree - Explorador de archivos

¿Qué hace? Te da un explorador de archivos lateral como en VS Code.

" En tu .vimrc, entre call plug#begin() y call plug#end()
Plug 'preservim/nerdtree'

Configuración básica:

" Configuración de NERDTree
nnoremap <leader>n :NERDTreeToggle<CR>
nnoremap <leader>nf :NERDTreeFind<CR>

" Cerrar vim si solo queda NERDTree abierto
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" Mostrar archivos ocultos
let NERDTreeShowHidden=1

Comandos útiles:

  • <leader>n - Abrir/cerrar NERDTree
  • <leader>nf - Encontrar archivo actual en NERDTree
  • o - Abrir archivo/directorio
  • s - Abrir en split vertical
  • i - Abrir en split horizontal

2. fzf.vim - Búsqueda difusa (fuzzy finder)

¿Qué hace? Búsqueda súper rápida de archivos, como Ctrl+P en VS Code.

" Necesitas fzf instalado en tu sistema primero
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

Instalación de fzf en sistema:

# macOS
brew install fzf

# Ubuntu/Debian
sudo apt install fzf

# Arch
sudo pacman -S fzf

Configuración:

" Configuración de fzf
nnoremap <leader>f :Files<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>g :Rg<CR>
nnoremap <leader>h :History<CR>

" Personalizar ventana de fzf
let g:fzf_layout = { 'down': '40%' }

Comandos útiles:

  • <leader>f - Buscar archivos
  • <leader>b - Buscar buffers abiertos
  • <leader>g - Buscar en contenido (requiere ripgrep)
  • <leader>h - Historial de archivos

3. vim-airline - Status line mejorada

¿Qué hace? Una barra de estado moderna y informativa.

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

Configuración:

" Configuración de airline
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline_theme='dark'

" Símbolos para airline (opcional, requiere Nerd Font)
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_symbols.linenr = '☰'
let g:airline_symbols.maxlinenr = ''

4. vim-fugitive - Git integration

¿Qué hace? Control de Git desde dentro de Vim.

Plug 'tpope/vim-fugitive'

Comandos útiles:

  • :Git o :G - Git status
  • :Git add % - Añadir archivo actual
  • :Git commit - Commit
  • :Git push - Push
  • :Git blame - Ver blame del archivo

Mapeos útiles:

" Git shortcuts
nnoremap <leader>gs :Git<CR>
nnoremap <leader>gc :Git commit<CR>
nnoremap <leader>gp :Git push<CR>
nnoremap <leader>gl :Git log --oneline<CR>

5. Auto-pairs - Paréntesis automáticos

¿Qué hace? Cierra automáticamente paréntesis, corchetes, comillas.

Plug 'jiangmiao/auto-pairs'

Funcionalidad automática:

  • Escribes ( → obtienes ()
  • Escribes " → obtienes ""
  • Presionas Enter dentro de {} → formato correcto

🎨 Temas y colores

Plug 'morhetz/gruvbox'

Configuración:

" Configuración de gruvbox
colorscheme gruvbox
set background=dark " o light
let g:gruvbox_contrast_dark = 'medium'

Tema onedark

Plug 'joshdick/onedark.vim'

Configuración:

colorscheme onedark

📋 Tu primer .vimrc con plugins

Aquí tienes una configuración completa que incluye todo lo anterior:

" ===================================================================
" VIMRC CON PLUGINS ESENCIALES
" ===================================================================

" Configuración básica (del capítulo anterior)
set number
set relativenumber
set ignorecase
set smartcase
set hlsearch
set incsearch
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent
set wrap
set linebreak
set showmatch
set cursorline
set mouse=a
set clipboard=unnamedplus
set splitbelow
set splitright
set scrolloff=8
set nobackup
set nowritebackup
set noswapfile
set hidden

" Leader key
let mapleader = " "

" ===================================================================
" PLUGINS
" ===================================================================

call plug#begin('~/.vim/plugged')

" Explorador de archivos
Plug 'preservim/nerdtree'

" Búsqueda difusa
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" Status line
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" Git integration
Plug 'tpope/vim-fugitive'

" Auto-pairs
Plug 'jiangmiao/auto-pairs'

" Tema
Plug 'morhetz/gruvbox'

call plug#end()

" ===================================================================
" CONFIGURACIÓN DE PLUGINS
" ===================================================================

" Tema
colorscheme gruvbox
set background=dark

" NERDTree
nnoremap <leader>n :NERDTreeToggle<CR>
nnoremap <leader>nf :NERDTreeFind<CR>
let NERDTreeShowHidden=1
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" fzf
nnoremap <leader>f :Files<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>g :Rg<CR>
let g:fzf_layout = { 'down': '40%' }

" Airline
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='gruvbox'

" Git (Fugitive)
nnoremap <leader>gs :Git<CR>
nnoremap <leader>gc :Git commit<CR>
nnoremap <leader>gp :Git push<CR>

" ===================================================================
" MAPEOS BÁSICOS
" ===================================================================

" Comandos esenciales
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>x :x<CR>

" Limpiar búsqueda
nnoremap <leader>h :nohlsearch<CR>

" Navegación entre ventanas
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" Splits
nnoremap <leader>sv :vsplit<CR>
nnoremap <leader>sh :split<CR>

echo "🚀 Vim con plugins cargado!"

🔧 Instalación paso a paso

Paso 1: Instalar vim-plug

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

Paso 2: Crear .vimrc

# Backup de configuración anterior
cp ~/.vimrc ~/.vimrc.backup

# Crear nueva configuración
vim ~/.vimrc
# (copiar la configuración de arriba)

Paso 3: Instalar herramientas externas

# Para fzf y búsqueda en contenido
# macOS
brew install fzf ripgrep

# Ubuntu/Debian
sudo apt install fzf ripgrep

# Arch
sudo pacman -S fzf ripgrep

Paso 4: Instalar plugins

# Abrir vim
vim

# Instalar plugins
:PlugInstall

# Esperar a que termine (verás una ventana de progreso)
# Reiniciar vim
:q
vim

🎮 Probando tu nueva configuración

Ejercicio 1: Exploración de archivos

  1. Abre vim en un proyecto: vim
  2. Abre NERDTree: <Space>n
  3. Navega por directorios con flechas
  4. Abre archivo con o
  5. Busca archivo actual: <Space>nf

Ejercicio 2: Búsqueda difusa

  1. Buscar archivos: <Space>f
  2. Escribir parte del nombre
  3. Usar flechas para navegar
  4. Enter para abrir

Ejercicio 3: Git workflow

  1. Hacer cambios en un archivo
  2. Ver status: <Space>gs
  3. Añadir archivo: :Git add %
  4. Commit: <Space>gc

🚨 Problemas comunes

Plugin no se instala

" Verificar que vim-plug está instalado
:PlugStatus

" Reinstalar plugin específico
:PlugInstall [nombre-plugin]

fzf no funciona

# Verificar que fzf está instalado en sistema
which fzf

# Instalar si no está
brew install fzf # macOS
sudo apt install fzf # Ubuntu

Tema no se aplica

" Verificar que el plugin está instalado
:PlugStatus

" Aplicar tema manualmente
:colorscheme gruvbox

NERDTree se ve raro

  • Instala una fuente con iconos (Nerd Font)
  • O desactiva iconos: let g:NERDTreeDirArrowExpandable = '+'

🎯 Plugins adicionales recomendados

Una vez que domines los básicos, considera estos:

Para desarrollo:

  • vim-commentary - Comentar código fácilmente
  • vim-surround - Manipular comillas, paréntesis
  • ale - Linting y corrección de errores

Para productividad:

  • vim-easymotion - Navegación súper rápida
  • ctrlp.vim - Alternativa a fzf
  • vim-gitgutter - Ver cambios git en margen

🔜 ¿Qué sigue?

En el próximo capítulo aprenderemos navegación de archivos avanzada y cómo organizar tu workspace de manera eficiente.


💡 Tip pro: No instales muchos plugins de una vez. Domina estos básicos primero, luego añade gradualmente según tus necesidades.

🎯 Objetivo del capítulo: Tener un Vim moderno y funcional con plugins esenciales.