Una chuletilla de VI iMproved (vim)
La mejor forma de entender qué hace cada cosa es… probándola
Desplazamiento
- Letra a letra: h / j / k / l
- Palabras: inicio de palabra w / b, final e / ge
- Comienzo / final línea: ^ / $
- Letra dentro de una línea: fx / Fx
- Avance en páginas: Ctrl-F / Ctrl-B
- Paréntesis (o llave o corchete) asociado: %
- Línea del fichero: xG /
(G / :$ va directo al final del fichero), x% (porcentaje del fichero) - Saltos: Ctrl-O / Ctrl-I
- marcas: mx, ‘x (marcas en minúscula son locales al fichero actual, en mayúscula permiten navegar por diferentes ficheros)
Información
- :set number / nonumber: mostrar número de línea
Búsquedas
- /patron , ?patron . n (siguiente aparición) \< y \> representan el comienzo y final de una palabra (para buscar palabras completas)
- /patron/+2 -> la segunda linea despues de patron
- :set ignorecase
- :set hlsearch (destacar apariciones)
- Palabra actual: * / #
- Reemplazar -> :%s_patron_sustitucion_g (cambiando g por c pide confirmación)
- global -> :[rango]g/patron/comando – aplica comando en las lineas que dentro de rango coinciden con patrón
- :grep -> buscar en varios ficheros. :cn mueve a la siguiente aparición
[I: -> mostrar las definiciones en ficheros incluidos que coinciden con la función actual
Insertar texto (i): I / A. Pulsando Ctl+n autocompleta en base a las palabras que haya en el documento.
Digrafos (Ctl+k): permiten introducir caracteres no soportados por defecto. Por ejemplo, ã sería Ctl+k ~ a
Abreviaturas
:ab sr señor
Asociar teclas
:map! â \^{a}
(map! aplica a los modos inserción y línea de comandos, map a normal, visual y selección)
Borrar (d). El texto borrado se lleva a un buffer (algo así como “Cortar”)
- dl (x), dh (X)
- dw
- dd
- d$ (D)
- di< / dit borrar tag-blocks (util para HTML / XML)
- text-objects: borrar cadenas entre comillas (di”), entre llaves (diB), paréntesis (dib)
Cambiar (c) / Sustituir (r)
- cl (s)
- cw
- cc (S)
- c$
- R
- Repetir el último cambio: .
- cambiar mayúsculas / minúsculas: ~ (se puede usar con un bloque visual)
Deshacer (u), rehacer (Ctrl-R), :earlier 5m (volver al estado del fichero hace 5 minutos)
Formato de líneas:
Las variables tw y fo controlan el ajuste automático de línea. Por ejemplo, para 90 columnas:
:set tw=90
:set fo+=t
# Para desabilitar el ajuste, usar set fo-=t
Si el texto ya está insertado, se puede ajustar párrafo a párrafo con el comando gqap
Modo visual:
- letra a letra (v), líneas (V), rectángulo/columnas (Ctrl-V), cambio de lado (o)
- rx: rellena el bloque con la letra x
- > / < : indenta el bloque
- text objects: vi’, viB, vib…
El modo columna (Ctrl-V) es util para indentar con espacios, o para eliminar el principio de varias lineas que comienzan con el mismo texto.
Copiar (y): yw, yy; “*yy (portapapeles).
Pegar (Colocar): p/P, “*p (portapapeles),
Registros: “xyy (copiar al registros x), “xp (pegar registro x), “xd (cortar al registro x). Los registros numerados contienen un histórico automático de lo que se ha copiado con yy a secas. Por ejemplo, “0p pega lo último copiado. :reg muestra los registros. Más sobre registros.
Destaque de sintaxis:
- :syntax enable
Autocompletado
- “omni”: ctl-x ctl-o
Ficheros:
- (:w)rite, :wall
- (:q)uit, :qall
- :wq, :wqall
- (:n)ext file
- (:p)revious file
Edición varios ficheros a la vez: ventanas y pestañas
- :next, :previous, Ctl-^
- :split, vim -O / :vsplit : división horizontal / vertical (mismo fichero). Para desplazarse simultaneamente en las ventanas, hay que ejecutar :set scrollbind en cada una
- Ctrl-w Ctrl-w: cambiar de ventana en secuencia
- Ctrl-w h / j / k / l : desplazarse de una ventana a otra
- Ctrl-+ / Ctrl– : cambiar tamaño ventana
- :tabedit, :tab split, vim -p
- gt: cambiar de pestaña en secuencia, :tabp / Ctrl-RePag, :tabN / Ctrl-AvPag
- :close
Macros
- qxcomandosq: grabar macro en registro x (los mismos de más arriba)
- @x: ejecutar macro x
- @@: ejecutar última macro
Plugins interesantes:
