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
Comando | Acción | Cuándo usar |
---|---|---|
:PlugInstall | Instalar plugins nuevos | Después de añadir plugin |
:PlugUpdate | Actualizar plugins | Mantenimiento semanal |
:PlugClean | Eliminar plugins no usados | Limpieza |
:PlugStatus | Ver estado de plugins | Debug |
🎨 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 NERDTreeo
- Abrir archivo/directorios
- Abrir en split verticali
- 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
Tema gruvbox (muy popular)
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
- Abre vim en un proyecto:
vim
- Abre NERDTree:
<Space>n
- Navega por directorios con flechas
- Abre archivo con
o
- Busca archivo actual:
<Space>nf
Ejercicio 2: Búsqueda difusa
- Buscar archivos:
<Space>f
- Escribir parte del nombre
- Usar flechas para navegar
- Enter para abrir
Ejercicio 3: Git workflow
- Hacer cambios en un archivo
- Ver status:
<Space>gs
- Añadir archivo:
:Git add %
- 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ácilmentevim-surround
- Manipular comillas, paréntesisale
- Linting y corrección de errores
Para productividad:
vim-easymotion
- Navegación súper rápidactrlp.vim
- Alternativa a fzfvim-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.