Saltar al contenido principal

106. Comandos esenciales y tu primera configuración ⚙️

Los comandos que usarás todos los días

Ahora que sabes moverte y editar básicamente, es hora de aprender los comandos esenciales que harán tu vida más fácil y crear una configuración que te haga más productivo.

💾 Comandos de archivo

Guardar y salir (lo más importante)

ComandoAcciónCuándo usar
:wGuardarGuardar sin cerrar
:qSalirSi no hay cambios
:wqGuardar y salirComando más común
:xGuardar y salirIgual que :wq pero más rápido
:q!Salir sin guardar¡Cuidado! Pierdes cambios
:w!Forzar guardarSi el archivo es read-only

Trabajar con archivos

ComandoAcciónEjemplo
:e archivoAbrir archivo:e config.js
:w archivoGuardar como:w backup.txt
:r archivoInsertar contenido de archivo:r header.html
:newNuevo bufferPara archivo temporal
ComandoAcciónDescripción
:e.Explorador de archivos nativoNavegar directorios
gfIr a archivo bajo cursorPara imports/includes
Ctrl+^Alternar entre últimos 2 archivosSúper útil

🔍 Búsqueda y reemplazo básico

Búsqueda

ComandoAcciónEjemplo
/textoBuscar hacia adelante/function
?textoBuscar hacia atrás?const
nSiguiente resultadoDespués de buscar
NResultado anteriorDirección opuesta
*Buscar palabra bajo cursorSúper útil
#Buscar palabra bajo cursor (atrás)-

Reemplazo simple

ComandoAcciónEjemplo
:s/viejo/nuevo/Reemplazar en línea actual:s/var/const/
:s/viejo/nuevo/gReemplazar todos en líneag = global
:%s/viejo/nuevo/gReemplazar en todo el archivo% = todo el archivo
:%s/viejo/nuevo/gcReemplazar con confirmaciónc = confirm

Ejemplo práctico:

var userName = "alice";
var userAge = 25;
var userEmail = "alice@test.com";

Para cambiar todas las var a const:

:%s/var/const/g

📋 Comandos de línea útiles

ComandoAcciónEjemplo
:42Ir a línea 42:100
:$Ir a última líneaFinal del archivo
:.Línea actualPara referencia
:1,10Rango de líneas 1-10Para comandos

Información del archivo

ComandoAcciónInformación que muestra
Ctrl+gEstado del archivoLínea actual, total, %
:fInformación de archivoNombre, líneas, estado
g Ctrl+gEstadísticas detalladasPalabras, caracteres, bytes

🛠️ Tu primera configuración (.vimrc)

Vamos a crear una configuración práctica y bien comentada:

" ===================================================================
" CONFIGURACIÓN ESENCIAL DE VIM
" ===================================================================
" Archivo: ~/.vimrc
" Descripción: Configuración básica pero potente para productividad

" -------------------------------------------------------------------
" CONFIGURACIÓN BÁSICA
" -------------------------------------------------------------------

" Números de línea
set number " Mostrar números de línea
set relativenumber " Números relativos para movimientos

" Búsqueda mejorada
set ignorecase " Ignorar mayúsculas en búsqueda
set smartcase " Si hay mayúsculas, ser sensible a ellas
set hlsearch " Highlight resultados
set incsearch " Búsqueda incremental (mientras escribes)

" Indentación inteligente
set tabstop=4 " Tabs se ven como 4 espacios
set softtabstop=4 " Tabs se insertan como 4 espacios
set shiftwidth=4 " Indentación usa 4 espacios
set expandtab " Usar espacios en lugar de tabs
set autoindent " Mantener indentación de línea anterior
set smartindent " Indentación inteligente para código

" Interfaz mejorada
set wrap " Wrap líneas largas
set linebreak " Wrap en palabras, no caracteres
set showmatch " Mostrar pareja de brackets/paréntesis
set cursorline " Highlight línea actual
set laststatus=2 " Siempre mostrar status line

" Comportamiento
set mouse=a " Habilitar mouse (útil al principio)
set clipboard=unnamedplus " Usar clipboard del sistema (Linux)
" set clipboard=unnamed " Para macOS
set splitbelow " Nuevas ventanas horizontales abajo
set splitright " Nuevas ventanas verticales a la derecha
set scrolloff=8 " Mantener 8 líneas de contexto
set sidescrolloff=8 " Mantener 8 columnas de contexto

" Archivos y backups
set nobackup " No crear archivos .bak
set nowritebackup " No crear backup temporal
set noswapfile " No crear archivos .swp
set hidden " Permitir buffers ocultos con cambios

" Historial
set history=1000 " Recordar 1000 comandos
set undolevels=1000 " 1000 niveles de undo

" -------------------------------------------------------------------
" MAPEOS DE TECLAS (KEYBINDINGS)
" -------------------------------------------------------------------

" Leader key - la tecla mágica para comandos personalizados
let mapleader = " " " Usar espacio como leader

" Comandos esenciales de supervivencia
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>x :x<CR>
nnoremap <leader>W :wq!<CR>

" Limpiar highlight de búsqueda (súper útil)
nnoremap <leader>h :nohlsearch<CR>

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

" Crear splits rápidamente
nnoremap <leader>sv :vsplit<CR>
nnoremap <leader>sh :split<CR>
nnoremap <leader>sc :close<CR>

" Redimensionar ventanas
nnoremap <leader>= <C-w>=
nnoremap <leader>+ <C-w>+
nnoremap <leader>- <C-w>-

" Movimiento mejorado en líneas wrapeadas
nnoremap j gj
nnoremap k gk

" Mover líneas arriba/abajo en modo visual
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv

" Indentación mejorada (mantener selección)
vnoremap < <gv
vnoremap > >gv

" Pegar múltiples veces sin perder el contenido
vnoremap p "_dP

" Búsqueda mejorada (centrar resultado)
nnoremap n nzzzv
nnoremap N Nzzzv

" -------------------------------------------------------------------
" CONFIGURACIÓN VISUAL
" -------------------------------------------------------------------

" Colores y tema
syntax enable " Habilitar syntax highlighting
colorscheme desert " Tema por defecto (siempre disponible)

" Alternativas de colores incluidos en Vim:
" colorscheme blue, darkblue, elflord, evening, industry, koehler,
" morning, murphy, pablo, peachpuff, ron, shine, slate, torte, zellner

" Configuración de colores específicos
highlight LineNr ctermfg=gray
highlight CursorLine cterm=NONE ctermbg=darkgray
highlight Search ctermbg=yellow ctermfg=black

" -------------------------------------------------------------------
" CONFIGURACIONES AUTOMÁTICAS
" -------------------------------------------------------------------

" Habilitar detección de tipo de archivo
filetype plugin indent on

" Quitar espacios en blanco al final al guardar
autocmd BufWritePre * :%s/\s\+$//e

" Recordar posición del cursor al abrir archivo
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif

" Configuración específica por tipo de archivo
autocmd FileType python setlocal tabstop=4 softtabstop=4 shiftwidth=4
autocmd FileType javascript,typescript,json,html,css setlocal tabstop=2 softtabstop=2 shiftwidth=2
autocmd FileType yaml setlocal tabstop=2 softtabstop=2 shiftwidth=2

" -------------------------------------------------------------------
" CONFIGURACIONES AVANZADAS
" -------------------------------------------------------------------

" Mejorar autocompletado de línea de comandos
set wildmenu
set wildmode=longest:full,full

" Ignorar ciertos archivos
set wildignore=*.o,*.obj,*.bak,*.exe,*.pyc,*.jpg,*.gif,*.png,node_modules/**

" Mostrar comandos incompletos
set showcmd

" Mostrar modo actual
set showmode

" -------------------------------------------------------------------
" ALIAS Y COMANDOS PERSONALIZADOS
" -------------------------------------------------------------------

" Comando para editar vimrc rápidamente
command! Vimrc :e ~/.vimrc

" Comando para recargar vimrc
command! Source :source ~/.vimrc

" Comando para mostrar espacios en blanco
command! ShowSpaces :set list listchars=tab:>-,trail:·,space:·

" Comando para ocultar espacios en blanco
command! HideSpaces :set nolist

" -------------------------------------------------------------------
" MENSAJES DE INFORMACIÓN
" -------------------------------------------------------------------

" Mostrar mensaje de carga
echo "🚀 Configuración de Vim cargada correctamente!"
echo "💡 Leader key: <Space>"
echo "📚 Comandos útiles:"
echo " <leader>w - Guardar"
echo " <leader>q - Cerrar"
echo " <leader>h - Limpiar búsqueda"
echo " <leader>sv - Split vertical"
echo " :Vimrc - Editar configuración"
echo " :Source - Recargar configuración"

🎯 Comandos personalizados útiles

Mapeos con leader key

Ya incluidos en la configuración arriba, pero aquí el razonamiento:

MapeoComandoPor qué es útil
<leader>w:w<CR>Guardar rápido
<leader>q:q<CR>Cerrar rápido
<leader>h:nohlsearch<CR>Limpiar búsqueda
<leader>sv:vsplit<CR>Split vertical
<leader>sh:split<CR>Split horizontal

¿Por qué espacio como leader?

  1. Accesible: Fácil de alcanzar con ambos pulgares
  2. No usado: En modo Normal, espacio solo mueve cursor
  3. Cómodo: No requiere combinaciones raras
  4. Estándar: Muchos usuarios de Vim lo usan

🔧 Aplicar la configuración

Paso 1: Crear el archivo

# Hacer backup si ya tienes .vimrc
cp ~/.vimrc ~/.vimrc.backup

# Crear nuevo .vimrc
vim ~/.vimrc

Paso 2: Copiar la configuración

  1. Entra en modo Insert (i)
  2. Copia y pega toda la configuración de arriba
  3. Guarda y sal (:wq)

Paso 3: Probar la configuración

# Abrir un archivo para probar
vim test.txt

# Probar algunos comandos:
# <Space>w para guardar
# <Space>h para limpiar búsqueda
# /texto para buscar

🧪 Ejercicios con tu nueva configuración

Ejercicio 1: Navegación mejorada

def calculate_total(price, tax, discount):
"""Calculate final price with tax and discount"""
subtotal = price + tax
total = subtotal - discount
return total

result = calculate_total(100, 21, 5)
print(f"Total: {result}")

Tareas:

  1. Busca calculate con * (cursor en la palabra)
  2. Usa n para ir al siguiente (debería centrarse automáticamente)
  3. Cambia calculate_total a compute_total en ambos lugares

Ejercicio 2: Splits y ventanas

  1. Abre un archivo: vim archivo.txt
  2. Crea split vertical: <Space>sv
  3. Abre otro archivo: :e otro_archivo.txt
  4. Navega entre ventanas: Ctrl+h, Ctrl+l
  5. Iguala ventanas: <Space>=

Ejercicio 3: Búsqueda y reemplazo

<div class="user">
<span class="user-name">Alice</span>
<span class="user-age">25</span>
<span class="user-email">alice@test.com</span>
</div>

Tareas:

  1. Reemplaza user con person en todo el archivo: :%s/user/person/g
  2. Busca Alice y reemplázala con tu nombre
  3. Usa <Space>h para limpiar el highlight

📚 Comandos adicionales útiles

Trabajo con múltiples archivos

ComandoAcciónUso
:args *.jsCargar múltiples archivosPara edición en lote
:argdo %s/old/new/geComando en todos los archivose = no error si no encuentra
:wallGuardar todos los archivosCuando trabajas con varios

Debug y información

ComandoAcciónInformación
:versionVersión de VimCaracterísticas compiladas
:setVer configuración actualTodas las opciones
:set option?Ver valor específico:set tabstop?
:messagesVer mensajes de VimErrores, warnings

🎯 Metas para este capítulo

Cuando domines esta configuración deberías poder:

  • Guardar y cerrar archivos instantáneamente (<Space>w, <Space>q)
  • Buscar y reemplazar eficientemente
  • Trabajar con múltiples ventanas cómodamente
  • Navegar archivos usando comandos nativos
  • Personalizar Vim según tus necesidades

🔜 ¿Qué sigue?

En el próximo capítulo (nivel Productividad) aprenderemos movimientos avanzados que te harán navegar por archivos como un ninja.


💡 Tip pro: No añadas todo a tu .vimrc de una vez. Empieza con esta configuración y ve añadiendo funcionalidades gradualmente según las vayas necesitando.

🎯 Objetivo del capítulo: Tener una configuración sólida de Vim que mejore tu productividad diaria.