Saltar al contenido principal

Integración Vim + Tmux: El Combo Perfecto 🚀

La verdadera magia ocurre cuando combinas Vim con Tmux. Esta integración te permite crear un entorno de desarrollo completo en terminal que rivaliza con cualquier IDE moderno.

🎯 ¿Por qué integrar Vim y Tmux?

Beneficios de la combinación

  • Sesiones persistentes: Mantén tu trabajo activo incluso al desconectarte
  • Múltiples contextos: Trabaja en varios proyectos simultáneamente
  • Navegación fluida: Cambia entre Vim y terminal sin interrupción
  • Configuración sincronizada: Comparte configuraciones entre ambos
  • Productividad extrema: El flujo de trabajo más eficiente en terminal

🔧 Configuración de la integración

Vim-tmux navigator

Plugin esencial para navegación entre paneles:

" En tu .vimrc
Plug 'christoomey/vim-tmux-navigator'

" Mapeos para navegación
let g:tmux_navigator_no_mappings = 1

nnoremap <silent> <C-h> :TmuxNavigateLeft<cr>
nnoremap <silent> <C-j> :TmuxNavigateDown<cr>
nnoremap <silent> <C-k> :TmuxNavigateUp<cr>
nnoremap <silent> <C-l> :TmuxNavigateRight<cr>
nnoremap <silent> <C-\> :TmuxNavigatePrevious<cr>

Configuración en Tmux

# En tu .tmux.conf
# Smart pane switching with awareness of Vim splits
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'

bind-key -T copy-mode-vi 'C-h' select-pane -L
bind-key -T copy-mode-vi 'C-j' select-pane -D
bind-key -T copy-mode-vi 'C-k' select-pane -U
bind-key -T copy-mode-vi 'C-l' select-pane -R

📋 Workflows de desarrollo

Layout básico de desarrollo

# Crear sesión con layout predefinido
tmux new-session -d -s desarrollo
tmux split-window -h -t desarrollo
tmux split-window -v -t desarrollo:0.1
tmux send-keys -t desarrollo:0.0 'vim .' Enter
tmux send-keys -t desarrollo:0.1 'git status' Enter
tmux attach-session -t desarrollo

Script de inicio de proyecto

#!/bin/bash
# start-dev.sh
PROJECT_NAME=$1
SESSION_NAME=${PROJECT_NAME:-dev}

cd ~/proyectos/$PROJECT_NAME

tmux new-session -d -s $SESSION_NAME -c ~/proyectos/$PROJECT_NAME

# Panel principal: Vim
tmux send-keys -t $SESSION_NAME:0 'vim .' Enter

# Panel derecho: comandos
tmux split-window -h -t $SESSION_NAME:0
tmux send-keys -t $SESSION_NAME:0.1 'git status' Enter

# Panel inferior derecho: logs/tests
tmux split-window -v -t $SESSION_NAME:0.1
tmux send-keys -t $SESSION_NAME:0.2 'echo "Ready for testing..."' Enter

# Ventana adicional para terminal libre
tmux new-window -t $SESSION_NAME -n terminal

# Volver al panel principal
tmux select-pane -t $SESSION_NAME:0.0
tmux attach-session -t $SESSION_NAME

🎨 Configuración visual sincronizada

Colores coordinados

" En .vimrc - Usar mismo esquema que tmux
if exists('$TMUX')
set t_Co=256
colorscheme molokai
endif
# En .tmux.conf - Coordinar con Vim
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"

# Status bar similar a vim
set -g status-style bg=colour235,fg=colour136

Información compartida

# Mostrar rama de git en status de tmux
set -g status-right '#(cd #{pane_current_path}; git rev-parse --abbrev-ref HEAD 2>/dev/null)'

⚡️ Atajos de teclado avanzados

" En Vim - Saltar a terminal sin salir
nnoremap <leader>t :!tmux select-pane -t :.1<CR><CR>

" Ejecutar comando en panel adyacente
nnoremap <leader>r :!tmux send-keys -t :.1 "npm test" Enter<CR><CR>

Intercambio de buffers

" Copiar desde Vim al clipboard de tmux
vnoremap <leader>y :!tmux load-buffer -<CR>

" Pegar desde tmux a Vim
nnoremap <leader>p :r !tmux save-buffer -<CR>

🔄 Gestión de sesiones avanzada

Sesiones por proyecto

# Función para crear sesión de proyecto
create_project_session() {
local project_name=$1
local project_path="~/proyectos/$project_name"

if tmux has-session -t $project_name 2>/dev/null; then
tmux attach-session -t $project_name
else
cd $project_path
tmux new-session -d -s $project_name -c $project_path

# Layout específico por tipo de proyecto
if [ -f "package.json" ]; then
setup_node_layout $project_name
elif [ -f "Dockerfile" ]; then
setup_docker_layout $project_name
else
setup_default_layout $project_name
fi

tmux attach-session -t $project_name
fi
}

# Alias útiles
alias dev='create_project_session'
alias devs='tmux list-sessions'

Layouts específicos por tecnología

Layout para Node.js

setup_node_layout() {
local session=$1

# Vim en panel principal
tmux send-keys -t $session:0 'vim .' Enter

# Panel para npm/yarn
tmux split-window -h -t $session:0
tmux send-keys -t $session:0.1 'npm run dev' Enter

# Panel para logs
tmux split-window -v -t $session:0.1
tmux send-keys -t $session:0.2 'tail -f logs/app.log' Enter

# Ventana para tests
tmux new-window -t $session -n tests
tmux send-keys -t $session:tests 'npm test -- --watch' Enter

tmux select-window -t $session:0
tmux select-pane -t $session:0.0
}

Layout para Docker

setup_docker_layout() {
local session=$1

# Vim en panel principal
tmux send-keys -t $session:0 'vim .' Enter

# Panel para docker
tmux split-window -h -t $session:0
tmux send-keys -t $session:0.1 'docker-compose logs -f' Enter

# Panel para comandos docker
tmux split-window -v -t $session:0.1
tmux send-keys -t $session:0.2 'docker ps' Enter

tmux select-pane -t $session:0.0
}

🎯 Ejercicios prácticos

Ejercicio 1: Setup básico

  1. Configura vim-tmux-navigator
  2. Crea un layout con Vim + terminal
  3. Practica navegación con Ctrl+hjkl

Ejercicio 2: Script de proyecto

  1. Crea script para iniciar proyecto
  2. Configura layout automático
  3. Añade detección de tipo de proyecto

Ejercicio 3: Workflow completo

  1. Trabaja en proyecto real
  2. Usa múltiples ventanas y paneles
  3. Implementa intercambio de buffers

🚀 Consejos de productividad

Mejores prácticas

  • Una sesión por proyecto: Mantén contextos separados
  • Layouts consistentes: Usa misma estructura siempre
  • Atajos memorables: Configura mapeos lógicos
  • Sincronización visual: Coordina colores y temas
  • Scripts automatizados: Reduce setup manual

Atajos esenciales

# En .tmux.conf
# Reload config rápido
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

# Quick pane creation
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# Session jumping
bind s choose-session

🔧 Troubleshooting común

Problemas de navegación

  • Verificar configuración de vim-tmux-navigator
  • Comprobar escape sequences en terminal
  • Reiniciar sesión tmux si es necesario

Problemas de colores

  • Configurar TERM correctamente
  • Verificar soporte 256 colores
  • Coordinar configuraciones

Performance

  • Limitar history de tmux si es lento
  • Optimizar configuración de Vim
  • Usar lazy loading en plugins

📚 Recursos adicionales


¡Con esta integración tendrás el entorno de desarrollo más productivo en terminal! 🎯