X

Atajos de teclado y comandos para usar VIM eficientemente

charset=InvalidCharsetId binary comment

En su día vimos una instalación y una configuración básica del editor de texto VIM. A continuación veremos una chuleta de atajos de teclado y comandos que vale la pena recordar para empezar a sacar partido a este editor de textos.

Intercambiar entre los distintos modos de trabajo de VIM

Como imagino sabrá la gran mayoría, VIM tiene varios modos de trabajo. Algunos de ellos son los siguientes:

  • Modo normal: Es el modo en que se encuentra VIM cuando lo abrimos. Será útil para navegar dentro del documento e introducir comandos.
  • Modo inserción: Es el que usaremos para editar texto.
  • Modo Visual (Visual, Línea visual y Bloque Visual): Generalmente se utiliza para seleccionar texto.
  • Modo comando: Permite realizar acciones. En el transcurso de este artículo verán comandos que son de gran utilidad.
  • Modo reemplazar: Permite reemplazar valores de una palabra o frase.

Para intercambiar entre cada uno de los modos que acabo de citar hay que usar los siguientes atajos de teclado:

Atajos de tecladoFunción
iPara acceder al modo inserción. En el transcurso del artículo verán otros modos de acceder al modo inserción.
vPara simplemente acceder al modo visual.
VAcceder al modo Línea visual.
Ctrl+vEntrar en modo Bloque visual.
:Para acceder al modo comando. Estando en el modo normal tecleamos : seguido del comando que queremos ejecutar. Los comandos realizan acciones. El modo comando guarda un registro, por lo tanto si usamos el atajo de teclado :<cursor ↧ ↥> podremos ir viendo los comandos que se han ejecutado previamente.
Shift+rPermite acceder al modo reemplazar.
ESCPara salir de los modos inserción, visual y comando y acceder al modo normal.

Guardar documentos en VIM

Para guardar los cambios en un fichero de VIM podemos usar los siguientes comandos:

Atajos de teclado y comandosFunción
:wGuarda los cambios realizados al documento actual.
:w nombre_ficheroGuarda el documento actual en un nuevo fichero. Es equivalente a guardar como.
:wq o :x o shift + z + zComando que guarda los cambios y cierra el fichero que estamos editando.

Salir de VIM

Las diferentes opciones que tenemos para salir y cerrar el editor de código VIM son las mostradas a continuación:

Atajos de teclado o comandosFunción
:q o shift + Z + QSalir del documento.
:q!Salir del documento sin guardar cambios. Si hay cambios que no se han guardado no se ejecutará el comando y recibiremos un advertencia.
:wqa!Guardar los cambios y salir en todos los ficheros/buffers que tenemos abiertos.
:qa!Si tienes abiertos varios ficheros de forma simultanea y quieres salir de Vim sin guardar los cambios de ninguno, puedes ejecutar: :qa!

Abrir documentos en VIM y moverse entre los distintos ficheros abiertos en los buffers

VIM permite tener varios documentos/buffers abiertos de forma simultanea. Una vez abiertos podemos usar una serie de comandos para navegar entre los distintos ficheros abiertos. Para ello deberemos usar las siguientes instrucciones.

Nota: Un buffer es el contenido de un fichero de texto cargado en memoria listo para ser editado. En el momento que se guarden los cambios realizados en el buffer se escribirá el fichero que contiene el código editado.

Atajos de teclado y comandosFunción
:e + nombre fichero por abrirAbrir una fichero adicional dentro de VIM. El fichero abierto se mostrará en pantalla justo al abrirlo . Podemos tener abiertos varios documentos al mismo tiempo.
:badd + nombre_del_fichero/bufferAñadir un buffer sin que sea mostrado en pantalla.
:lsLista y numera todos los buffers/ficheros que tenemos abiertos.
:bnIr al siguiente fichero/buffer que tenemos abierto. (Buffer_next).
:bpIr al fichero/buffer anterior que tenemos abierto. (Buffer_previous)
:blPara ver en pantalla el último buffer abierto.
:bfMostrar en pantalla el primer buffer abierto.
:b_número_bufferSi anteriormente hemos listado los buffer vemos que tienen asociado un número. Para cambiar de buffer podemos ejecutar el comando :b seguido del número de buffer. Por ejemplo :b2
:bdCerrar únicamente el fichero/buffer actual que estamos editando.
:bd2El comando :bd2 cierra el buffer 2.
:bd deuda.pyEl comando :bd deuda.py cierra el buffer deuda.py.
:baMostrar todos los buffer en pantalla.

Trabajar con pestañas en VIM

VIM permite trabajar con pestañas similares a las que usaríamos en un navegador web. En cada una de las pestañas podemos tener abierto un fichero/buffer para poder editar código o texto. Los atajos de teclado y comandos que podemos usar para trabajar con las pestañas son:

Atajos de teclado o comandosFunción
:tabnew nombre_ficheroAbrir un fichero en una pestaña nueva.
:tabedit nombre_ficheroEl fichero que queramos se abre en una pestaña nueva.
:tabfind nombre_ficheroAbre el fichero que queramos en una pestaña nueva. A medida que escribamos el nombre, si presionamos TAB se autocompletará el nombre del fichero. Solo autocompletará con nombres de ficheros que estén dentro de la ruta especificada en el path de VIM.
:tab ballTodos los buffers abiertos se ponen en pestañas.
:tab splitCopiar el contenido de la ventana actual en una pestaña.
:tabsListar todas las pestaña abiertas.
gt o :tabn o Ctrl-AvpágIr a la pestaña siguiente.
gT o :tabp o Ctrl-RePágIr a la pestaña anterior.
num_pestana+gtPara irnos a la pestaña número 3 presionamos el número 3 seguido de la teclas gt.
:tabfirstIr a la primera pestaña.
:tablastIr a la última pestaña.
:tabm 3Mueve la pestaña actual a la posición 3.
:tabm 0Mover la pestaña actual a la primera posición.
:tabmMover la pestaña actual a la última posición.
:tabclose! o :q!Cierra la pestaña actual aunque no esté guardada.
:tabclose o :qCierra la pestaña actual.
:tabonlyCerrar todas las pestañas excepto la pestaña actual.
vim -p archivo1.sh archivo2.shAbrir los ficheros archivo1.sh y archivo2.sh cada uno en una pestaña diferente.

Para más información de como trabajar con pestañas pueden consultar el siguiente enlace.

Trabajar con ventanas y varios ficheros de forma simultanea en VIM

VIM también permite subdividir/multiplexar el editor de textos en diversas partes. De este modo en una sola pantalla podremos visualizar y editar de forma sencilla y práctica varios ficheros. Para conseguir lo que acabo de citar deberán usar los siguientes atajos de teclado y comandos.

Atajos de teclado o comandosFunción
Ctrl+wvDividir la ventana verticalmente.
Ctrl+wsDividir la ventana horizontalmente.
Ctrl+w+(h/j/k/l)Moverse entre la distintas ventanas abiertas en pantalla
ctrl+wwCambiar de una ventana a otra.
Ctrl+wHacer que todas las ventanas tengan la misma dimensión.
Ctrl+wqCerrar la ventana sobre la que tenemos posicionado el cursor.
Ctrl+wxIntercambiar de posición las ventanas.
Ctrl+wrRotar ventana a la derecha.
Ctrl+wRRotar ventana a la izquierda.
:splitDividir la pantalla horizontalmente.
:split nombre_ficheroAbre un fichero y se parte la pantalla en 2 horizontalmente.
:vsplitAbre un fichero y se parte la pantalla en 2 verticalmente.
:resize 40Cambiar la altura de la ventana abierta a 40 columnas.
:vertical resize 80Cambiar el ancho de la ventana en 80 columnas.
:vertical resize -5Disminuir el ancho de la ventana en 5 columnas.
:vertical resize +5Incrementar el ancho de la ventana en 5 columnas.
Ctrl+w > y Ctrl+w <Aumentar o disminuir el tamaño de la ventana horizontalmente.
Ctrl+w + y Ctrl+w -Aumentar o disminuir el tamaño de la ventana verticalmente.
Ctrl+w =Reiniciar el ancho y el alto de las ventanas.
vim -o archivo1 archivo2 archivo3Abrir los ficheros archivo1, archivo2 y archivo3 cada uno en una ventana distinta.

Editar texto y posicionar el puntero del cursor donde queramos de forma rápida

Mediante los siguientes atajos de teclado podrán mover el cursor en la posición que necesiten y editar texto de forma extremadamente rápida. Las combinaciones de teclas a usar son las siguientes:

Atajos de tecladoFunción
j o cursor abajoPara mover el cursor hacia abajo.
k o cursor arribaPara mover el cursor hacia arriba.
h o cursor izquierdoPara mover el cursor hacia la izquierda.
l o cursor derechoPara mover el cursor hacia la derecha.
wMover el cursor al inicio de la siguiente palabra.
WMover el cursor al inicio de la siguiente palabra. El punto de puntuación no es considerado como palabra.
bMover el cursor al inicio a la palabra anterior.
BMover el cursor al inicio a la palabra anterior. El punto de puntuación no es considerado como palabra.
eDesplazar el cursor al final de la palabra en que estamos o al final de la palabra siguiente.
EDesplazar el cursor al final de la palabra en que estamos o al final de la palabra siguiente. El punto de puntuación no es considerado como palabra.
0Posicionar el cursor al inicio de la línea actual.
$ o FinPosicionar el cursor al final de la línea actual.
_Mueve el cursor al primer carácter que no sea un espacio en la línea actual. Este atajo es útil cuando programamos.
+Mueve el cursor al primer carácter que no sea un espacio de la línea siguiente. Este atajo es útil cuando programamos.
-Mueve el cursor al primer carácter que no sea un espacio de la línea anterior. Este atajo es útil cuando programamos.
shift + aPosicionar el cursor al final de la línea actual y cambiar al modo insertar.
shift + 5Mover el cursor del inicio de un paréntesis al final de un paréntesis y viceversa.
ggPara dirigirse a la primera línea del fichero.
GMover el cursor a la última línea del documento.
5 + EnterNos dirige 5 líneas más abajo respecto la línea actual.
10ggPosicionar el cursor a la línea 10 del documento.
16 + Mayús + gNos dirige a la línea 16 del fichero de texto.
}Hacer saltar el cursor al párrafo siguiente.
{Hacer saltar el cursor al párrafo anterior.
giPosicionar el cursor en la última palabra editada del buffer actual.
HMover el cursor a la parte superior de la pantalla.
MMover el cursor a la parte media de la pantalla.
LMover el cursor a la parte inferior de la pantalla
Ctrl+eMover una pantalla hacia abajo sin mover el cursor de posición.
Ctrl+yMover una pantalla hacia arriba sin mover el cursor de posición.
Ctrl+fAvanzar una pantalla.
Ctrl+bRetroceder una pantalla.
Ctrl+dHacer avanzar el cursor media pantalla.
Ctrl+uHacer retroceder el cursor media pantalla.
Ctrl+Para que el cursor avance una palabra hacia la derecha en modo insertar.
Ctrl+Para que el cursor avance una palabra hacia la izquierda en modo insertar.
iInsertar texto justo antes de donde tenemos posicionado el cursor.
IInsertar texto al principio de una línea.
aInsertar texto justo después de donde tenemos posicionado el cursor.
AInsertar texto al final de una línea.
oCrear un línea en blanco justo por debajo de la línea actual y pasar al modo inserción.
OCrear un línea en blanco justo por encima de la línea actual y pasar al modo inserción.
eaInsertar texto después de una palabra.
Ctrl + pAutocompletar la palabra que tenemos escrita a medias con otra palabra anterior al cursor.
Ctrl + w + cursoresCambiar entre las distintas ventanas que podemos tener abiertas en VIM.
Ctrl+gMostrar el número de líneas de un fichero.

Insertar texto repetitivo o secuencial en Vim

Si quieren insertar el mismo texto un número determinado de veces deberán operar de la forma que se detalla en la siguiente tabla.

Atajos de teclado y comandosFunción
40i-+ESC+ENTERInsertar 40 guiones.
10ihola mundo + ESC +ENTEREscribir 10 veces hola mundo.
i + geekland + ESC + 20.Escribe geekland 20 veces.
:put=range(1,10)Escribir los números del 1 al 10.
for i in range(0,50,1) | put='192.168.1.'.i | endforEscribe del 192.168.1.0 al 192.168.1.50

Atajos de teclado y comandos para copiar y pegar texto en VIM

Si lo que pretendéis es copiar, cortar y pegar texto dentro de VIM deberéis conocer y usar los siguientes atajos de teclado y comandos.

Nota: La totalidad de atajos de teclado y comandos que verán a continuación se tienen que usar en modo normal.

Atajos de teclado o fórmulasFunción
yyPara copiar una línea entera.
2yyCopiar 2 líneas a partir de donde tenemos el cursor.
y$Copiar desde donde tenemos posicionado el cursor hasta el final de la línea.
ywCopiar la palabra a partir desde donde tenemos posicionado el cursor hasta el final de la palabra.
yiwCopiar la palabra actual.
:10,20yCopiar de la línea 10 a la línea 20.
120yCopiar la línea 120.
ddPara cortar una línea entera.
2ddCortar 2 líneas a partir de donde tenemos el cursor.
d$ o DCortar desde donde tenemos posicionado el cursor hasta el final de la línea.
dwCortar la palabra desde donde tenemos posicionado el cursor hasta el final de la palabra.
diwCortar la palabra actual.
xCortar una carácter.
pPegar una línea en la línea después de donde tenemos el cursor.
:129putPegar una línea o conjunto de líneas que tenemos en el portapapeles a la línea 129 del documento.
shift + pPegar una línea en la línea antes de donde tenemos el cursor.

También podemos copiar y pegar texto en el modo visual. Para ello deberán seguir las siguientes instrucciones.

  1. Posicionamos el cursor en el punto que queremos empezar a copiar.
  2. Presionamos la letra v para entrar en el modo visual.
  3. Mediante los cursores o las teclas j, k, h, y l seleccionamos el texto que queremos copiar, cortar o eliminar.
  4. Si queremos copiar el texto seleccionado pulsamos y. Para cortarlo pulsamos d. En caso de querer eliminarlo pulsamos x.
  5. Finalmente podremos pegar el código. Para ello entramos en modo normal y usamos la tecla p.

Mover una línea de posición

Para mover una línea de posición usando numeración absoluta o relativa usaremos la siguiente combinación de teclas.

Atajos de tecladoFunción
:.-1m.+1Para mover la línea justo superior a la actual a la línea inferior justo al actual.
:19m17Mover la línea 19 a la línea 17.
:.-4,.-2m.+8Mover la línea de la -4 a la -2 desde la posición actual del cursor a la posición 8 respecto la posición actual del cursor.

Seleccionar texto en modo visual y acciones que podemos realizar en modo visual

Acabamos de ver una explicación de como seleccionar texto en modo visual usando los cursores o usando j, k, h, y l. Pero aparte de los cursores tenemos otras opciones para seleccionar texto. Algunas de ellas son las siguientes:

Nota: Para entrar en el modo visual tenemos que presionar v.

Atajos de tecladoFunción
vAcceder al modo visual. (Modo visual)
VIniciar el modo visual seleccionando toda una línea. Solo permite seleccionar lineas enteras. (Modo línea visual)
Ctrl + vInicia en modo Bloque visual.
iwSeleccionar la palabra sobre la que tenemos el cursor.
awSeleccionar la palabra sobre la que tenemos el cursor incluyendo el espacio.
abSeleccionar un bloque de texto que tenemos delimitado por paréntesis (). La selección incluye los paréntesis.
itSeleccionar un bloque de texto que tenemos delimitado por paréntesis (). La selección no incluye los paréntesis.
aBSeleccionar un bloque de texto que tenemos delimitado por corchetes {}. La selección incluye los corchetes.
iBSeleccionar un bloque de texto que tenemos delimitado por corchetes {}. La selección no incluye los corchetes.
atSeleccionar un bloque de texto delimitado etiquetas <> y </> incluyendo la etiquetas.
itSeleccionar un bloque de texto que tenemos delimitado etiquetas <> y </> sin incluir las etiquetas.
oMoverse a la parte inicial de un bloque delimitado por (), {}, <>..</>
OMoverse a la parte final de un bloque delimitado por (), {}, <>..</>
jSelecciona una frase entera y se va la siguiente línea.
isSelecciona frase hasta el primer punto.
ipSeleccionar una párrafo completo.
bSelecciona desde el cursor al inicio de la palabra.
eSelecciona des del cursor al final de la palabra.
$Seleccionar des del cursor al final de la línea.
^Seleccionar des del cursor al primer carácter imprimible de la línea.
awd$pSeleccionar una palabra y moverla al final de un párrafo.
uPara transformar todo el texto seleccionado en minúsculas.
UPara transformar todo el texto seleccionado en mayúsculas
>Mover la línea en que tenemos el cursor a la derecha. (Aplica sangría al texto.)
<Mover la línea en que tenemos el cursor a la izquierda. (Aplica sangría al texto.)
EscSalir del modo visual.

Para más información consultar el siguiente enlace.

Crear marcas en un fichero de VIM

Una marca de VIM permite guardar la posición actual del cursor. Una vez guardada la posición actual del cursor podremos volver a ella cuando lo necesitemos. Para crear y trabajar con las marcas usaremos los siguientes atajos de teclado y comandos:

Atajos de tecladoFunción – Explicación
m + [a - z]Si en modo normal presionamos ma crearemos una marca local que denominaremos a. Podemos usar marcas de la a la z o de la A a la Z.
`[a-z]Si una vez creada la marca a queremos volver a posicionar el cursor sobre la marca a, en modo normal presionaremos las teclas `a. Entonces el cursor se posicionará sobre la marca a.
' 'Para volver al inicio de la línea en que hemos introducido la marca.
'aNos traslada al inicio de la línea en que añadimos la marca a.
`Para ir a la marca anterior. Si estamos en la marca b nos trasladaremos a la marca a.
:delmarks aEliminar la marca a.
:delmarks!Eliminar todas las marcas locales o minúsculas de un fichero.
:delmarks a-dEliminar todas las marcas de la a hasta la d.
:delmarks aBcPara eliminar las marcas a, B y c.

Nota: Si asignamos una marca con letras minúsculas será una marca local. Por lo tanto solo estará disponible hasta que cerremos el fichero que estamos editando. Si queremos que la marca sea permanente tendremos que asignar la marca con letras mayúsculas. Si usamos las letras mayúsculas estaremos creando marcas globales.

Aplicar sangrías de texto a un texto en VIM de forma manual

Si cuando escribimos o programamos queremos añadir sangrías de texto de forma manual deberemos usar los siguientes atajos de teclado.

Atajos de tecladoFunción del atajo de teclado
>>Para sangrar un texto. (El texto se mueve a la derecha)
3 >>Realizar un sangrado en 3 líneas a partir de donde tenemos ubicado el cursor.
<<Para deshacer la sangría. (El texto se mueve a la izquierda)
]pPegar y ajustar a la sangría actual.
v + j + >Seleccionar una frase en modo visual y realizar una sangría a la derecha.
Ctrl+tPara aplicar un sangrado cuando estamos en el modo insertar. (Mueve texto a la derecha)
Ctrl+dPara aplicar un sangrado cuando estamos en el modo insertar. (Mueve texto a la izquierda)

Deshacer y rehacer cambios en VIM

VIM permite deshacer y rehacer cambios del buffer/fichero que estamos editando. Para ello deberemos usar los siguientes comandos o atajos de teclado:

Atajos de teclado o comandosFunción
uPara deshacer el último/s cambio/s realizado/s.
2uPara deshacer los 2 últimos cambios realizados.
URestaura la última línea modificada. Una vez restaurada no podemos rehacer el cambio.
ctrl + r o :redoPara rehacer el último cambio realizado.
3 + ctrl + rPara rehacer los 3 últimos cambios que hemos desecho.
:earlier 1hDeshacer todos los cambios realizados en la última hora.
:later 30mRehacer los cambios realizados en la última media hora.

Nota: En el momento que cerremos el fichero que estamos editando no podremos deshacer ni rehacer ningún cambio.

Atajos de teclado y comandos para eliminar caracteres y líneas en VIM

Para eliminar texto, líneas, párrafos y código en VIM deberemos usar los siguientes atajos de teclado.

Atajo de teclado o comandosFunción
xPara eliminar un carácter en modo normal.
3xElimina 3 caracteres a partir de donde tenemos posicionado el cursor.
XBorrar tan solo un carácter a la izquierda del cursor.
rReemplazar una carácter.
sEliminar un carácter y cambiar a modo insertar.
dwBorrar la palabra desde donde tengamos el cursor hasta el final de la palabra.
cwBorrar la palabra desde donde tengamos el cursor hasta el final de la palabra y cambiar a modo insertar.
diwBorrar la palabra entera sobre la que se encuentra el cursor.
ciwBorrar la palabra entera sobre la que se encuentra el cursor y cambiar a modo insertar.
c$Borrar todo el texto hasta el final de línea y pasar a modo insertar.
cc o SBorrar todo el contenido de una línea y pasar al modo insertar.
d6wEliminar 6 palabras a partir de donde tengamos posicionado el cursor.
d6bEliminar 6 palabras anteriores a donde tenemos posicionado el cursor.
c3wEliminar 3 palabras a partir de donde tengamos posicionado el cursor y cambiar a modo insertar.
ddPara borrar/cortar una línea entera.
shift + dBorrar desde la posición del cursor hasta el final de la línea.
d0Borrar desde la posición del cursor hasta el inicio de la línea.
ccPara borrar/cortar toda un línea entera y cambiar a modo insertar.
shift + cBorrar desde la posición del cursor hasta el final de la línea y cambiar al modo insertar.
c0Borrar desde la posición del cursor hasta el inicio de la línea y cambiar al modo insertar.
2ddBorrar/cortar 2 líneas de golpe a partir de donde tenemos posicionado el cursor.
2ccBorrar/cortar 2 líneas de golpe a partir de donde tenemos posicionado el cursor y cambiar al modo insertar.
Ctrl+hEstando en modo inserción elimina el carácter que está antes del cursor.
Ctrl+wEstando en modo inserción elimina toda la palabra que hay justo detrás del cursor.
Ctrl+uEstando en modo inserción elimina toda la línea que hay detrás del cursor.
xpTransponer 2 letras.
:%dPara borrar todas las líneas de un fichero.
dggBorrar desde la posición actual del cursor hasta al principio del fichero.
dGBorrar desde la posición actual del cursor hasta al final del fichero.
:[2],[4]Para eliminar las líneas de la 2 a la 4 podemos usar la formula :2,4d
:1,.-1dEliminar todas las líneas antes de la línea actual.
:.+1,$dEliminar todas las líneas después de la línea actual.
:g/<patrón>/dEliminar todas las filas que contengan un determinado patrón o palabra. Para eliminar todas las filas que contengan la palabra importante usaremos el comando :g/importante/d
:g!/<patrón>/dBorrar todas las líneas que no contengan una determinada palabra o patrón. Por ejemplo :g!/importante/d
:g/^A/dEliminar todas las líneas que empiezan por la letra A.
:g/^$/dPara eliminar todas las líneas vacías de un documento.
:.-2,.+8dEliminar líneas desde 2 líneas encima de mi posición hasta 8 líneas debajo de mi posición.

Otra forma de eliminar texto es mediante marcas o mediante el modo visual.

Si lo queréis realizar mediante marcas lo primero que hay que realizar es:

  1. Irse a la primera línea que queremos borrar e introducir una marca como por ejemplo ma.
  2. A continuación posicionamos el cursor en la última de las líneas que queremos borrar.
  3. Finalmente presionamos d'a y se borraran todas las líneas desde la posición actual del cursor hasta la línea que marcamos con la marca a.

Para eliminar texto en modo visual pueden consultar el apartado «Atajos de teclado para copiar y pegar texto en VIM»

Buscar una palabra o frase en VIM

Es extremadamente fácil buscar una determinada palabra en VIM. Para ello tan solo tendremos que recordar y usar los siguientes atajos de teclado.

Atajo de tecladoFunción
/palabra_a_buscarPara buscar todas las palabras que contengan las palabras labra escribiré lo siguiente estando en el modo normal de VIM /labra
/\<palabra_a_buscar\>Buscar una palabra completa y exacta.
?palabra_a_buscarBuscar todas las palabras que contengan un texto determinado y ubicar el cursor en la primera ocurrencia anterior a donde tenemos ubicado el cursor.
nUna vez realizada la búsqueda la letra n servirá para ir a la segunda aparición de la búsqueda realizada.
Shift+nTiene la misma función que n, pero en este caso va para atrás.
ggnPara ir a la primera aparición de la palabra buscada.
GnPara ir a la última aparición de la palabra buscada.
*Sobre la palabra que queramos buscar presionamos *. La búsqueda es hacia adelante.
#Sobre la palabra que queramos buscar presionamos #. La búsqueda es hacia atrás.
3/palabra_a_buscarBuscará todas las palabras que contengan la palabra a buscar y el cursor quedará ubicado en la tercera ocurrencia.

Para obtener más información sobre buscar en VIM pueden consultar el siguiente enlace.

Buscar y reemplazar palabras y caracteres en VIM

VIM dispone de la función buscar y reemplazar y texto. Para buscar y reemplazar palabras deberán usar los siguientes atajos de teclado o fórmulas.

Atajo de teclado o fórmulaFunción
rPermite reemplazar un carácter cuando estamos en modo normal.
RSe activa el modo reemplazar para cambiar los caracteres que queramos. No se saldrá del modo reemplazar hasta que presionemos la tecla ESC
Reemplaza la letra que señala el cursor por una ó
10róReemplaza las 10 letras a partir de la posición actual del cursor por ó
:s/geekland/GeeklandReemplaza todas las palabras que contienen geekland por Geekland solo en la línea actual.
:s/geekland/Geekland/gRemplaza todas las palabras que contienen geekland por Geekland únicamente en la línea que tenemos el cursor sin pedir confirmación.
:%s/geekland/Geekland/gRemplaza todas las palabras que contienen geekland por Geekland en todo un documento sin pedir confirmación.
:%s/geekland/Geekland/gcPara reemplazar todas las ocurrencias geekland de un fichero a Geekland pidiendo confirmación.
:%s!Geekland!ubuntu/scripts!giRemplaza todas las palabras que contienen Geekland por ubuntu/scripts usando el delimitador !. Al usar la opción i no se distingue entre mayúsculas y minúsculas. Para distinguir entre mayúsculas y minúsculas tendríamos que usar I.
:%s/\<geek\>/Linux/gcReemplaza la palabra exacta geek por Linux en todo el documento pidiendo confirmación.
:5,12s/foo/bar/gCambiar foo por bar entre las líneas 5 y 12. (Ambas incluidas)
:'a,'bs/foo/bar/gCambiar foo por bar entre la marcas a y b
:22s/Linux/Geekland/IReemplazar todas las palabras que contengan Linux por Geekland en la línea 22. Se tendrán en cuenta las mayúsculas y las minúsculas.
:.s/Geekland/Linux/IReemplazar todas las palabras que contengan Geekland por Linux únicamente en la línea actual. Se tendrán en cuenta las mayúsculas y las minúsculas.
g+u+uTransforma una frase entera a minúsculas.
g+U+UTransforma una frase entera a mayúsculas.

Para más información pueden consultar el siguiente enlace.

Nota: Se pueden usar expresiones regulares para reemplazar texto.

Especificando rangos en VIM

Especificar un rango es seleccionar una serie/conjunto de líneas de forma manual para aplicar acciones sobre ellas. En el apartado anterior vimos algunos ejemplos de como definir rangos. La sintaxis a usar para especificar rangos es la siguiente:

Ejemplos de rangosSignificado
%El símbolo % es para indicar que la acción a realizar aplica a todo el documento. Por ejemplo el comando :d% borra todas las líneas de un documento.
$El símbolo s es para indicar que la acción a realizar aplica solo a la última línea. Por ejemplo el comando :d$ borra únicamente la última línea del documento.
.Representa la línea actual en que esta posicionado el cursor.
'a,'bBloque de líneas entre las marcas a y b. Para reemplazar las palabras Linux por Geekland en el texto comprendido entre las marcas a y b usaremos el comando :'a,'bs/Linux/Geekland/g
:17,20dBorramos las líneas 17, 18, 19 y 20.
:.-2,.+8yPara indicar rangos con numeración relativa. Con el ejemplo indicado copiamos el contenido desde 2 líneas encima de mi posición actual hasta 8 líneas debajo de mi posición.

Juntar 2 Lineas en VIM

En el caso que necesiten juntar 2 líneas tan solo tendrán que presionar Shift + j en modo normal. De este modo conseguiremos unir 2 líneas que están separadas.

Atajo de teclado o fórmulaFunción
Shift + jPara juntar 2 líneas.
gJUne la línea que tenemos debajo del cursor con la actual sin dejar espacio entre ellas.
:joinFórmula a usar en el caso que se quieran juntar 2 líneas.

Realizar pliegues manuales en VIM

Para realizar pliegues y de este modo leer de forma más confortable un texto o un código hay que usar los siguientes atajos de teclado.

Atajos de tecladosFunción
zf <movimiento arriba o abajo>Definir un pliegue.
zf4jPlegar las 4 líneas que tenemos debajo del cursor.
zf2}Plegar los 2 párrafos justo por debajo del cursor.
zf2{Plegar los 2 párrafos justo por encima del cursor.
zoAbrir el pliegue sobre el que está posicionado el cursor.
zRAbre todos los pliegues del documento.
zdEliminar el pliegue que tenemos encima del cursor.
zEEliminar todos los pliegues del documento.
zcCerrar el pliegue que tenemos encima del cursor.
zMCierra todos los pliegues existentes en el documento.
zaAbrir y/o cerrar el pliegue que tenemos encima del cursor.
zjDesplaza el cursor al siguiente pliegue.
zkDesplaza el cursor al pliegue anterior.

Nota: Para realizar pliegues de forma manual hay que añadir set foldmethod=manual en el fichero de configuración ~/.vimrc.

Registros de VIM (portapapeles en VIM)

Los registros de VIM se pueden definir como un conjunto de 48 portapapeles en los que podemos almacenar información y pegar contenido al documento. Para trabajar y gestionar los 48 portapapeles que acabamos de mencionar usaremos los siguientes atajos de teclado.

Atajos de teclado y comandosFunción
:registers o :regMostrar el contenido que almacena cada uno de los 48 registros o portapapeles.
"1yyCopiar una línea al registro numérico 1.
"1pPegar el contenido del registro numérico 1.
"ayyCopiar una línea al registro nominal a. Al utilizar a en minúscula borras completamente el contenido del portapapeles a.
"AyyAñade una línea al registro nominal a. Al usar la A en mayúscula no se borra el contenido previamente guardado en a. Se añade .
"apPegar el contenido del registro nominal a.
:registers a o :reg aMostrar el contenido guardado en el registro a.
:reg 4 cMostrar el contenido que tiene almacenado el registro numérico 4 y el registro nominal c.
"+yyCopia la línea actual al portapapeles del sistema operativo.
"+pPegar el contenido que tenemos almacenado en el portapapeles del sistema operativo al documento que editamos.
"*pPegar un texto que tengamos seleccionado en nuestro navegador o en cualquier otro software de nuestro sistema operativo. No hace falta que el texto esté copiado en el portapapeles del sistema.
Ctrl+r+aPega el contenido del registro a estando en modo inserción de texto.
Ctrl+r "Pega el contenido del registro por defecto del portapapeles de VIM «» en modo inserción.
Ctrl+r +Pegar el contenido almacenado en el portapapeles del sistema operativo en modo inserción.
Ctrl+r *Pegar el contenido que tenemos seleccionado en cualquier aplicación de nuestro sistema operativo en el modo inserción de texto. No hace falta que el texto esté copiado en el portapapeles del sistema.

Nota: Existen 26 registros nominales. Estos van de la a a la z.

Nota: Existen 10 registros numéricos. Estos van de la 0 a la 9.

Registros de lectura y registros especiales

Acabamos de ver 36 registros de VIM. El resto de registros hasta llegar a los 48 serán registros de lectura y registros especiales. Algunos de los registros de lectura existentes son los siguientes:

RegistroContenido almacenado por el registro
":Almacena el último comando ejecutado.
"%Contiene la ruta que usamos para abrir el fichero de VIM que estamos editando.
".Contiene el último texto insertado.

Algunos de los registros especiales que tiene disponibles VIM son los siguientes:

RegistroContenido almacenado por el registro
"_Corresponde al registro agujero negro. Para evitar que una palabra borrada quede almacenada al registro por defecto de VIM podemos usar el atajo de teclas "_diw". De esta forma la palabra borrada solo quedará almacenada en el registro "_ y el registro "" quedará vacío.
":Almacena el último comando ejecutado.
"-Contiene todo el contenido que hemos borrado o modificado y que no tenga una longitud superior a una línea.
"\Almacena el contenido de la última búsqueda.
"=Registro que permite realizar operaciones matemáticas con VIM. Para realizar la suma 2 + 2 en modo normal presionaremos las teclas "=2+2. A posteriori presionaremos p para pegar el resultado.

Nota: La totalidad de registros de VIM se almacenan en el fichero ~/.viminfo. Por lo tanto los registros son permanentes. Es decir, en el momento de cerrar VIM no se borran los registros.

Usar la terminal de Linux en VIM

Si necesitamos usar la terminal mientras estamos usando VIM podemos aplicar las soluciones que veremos a continuación.

Atajos de teclado o comandosFunción
:termSe subdivide la pantalla en 2. En una de ellas tendremos VIM y en la otra la terminal. Para pasar de una ventana a otra podemos usar el atajo Ctrl+w
:!lsEjecuta el comando ls estando dentro de VIM. En vez de ls podríamos usar otros comandos como por ejemplo sudo apt update
:r !<comando>Pone la salida del comando ejecutado dentro del fichero de VIM que estamos editando.

Encadenar comandos en VIM

En el transcurso del artículo hemos visto una gran cantidad de comandos para realizar acciones. Usando la tubería | podemos ejecutar de forma simultanea más de un comando y de esto modo evitar introducir comando por comando. A continuación les dejo un par de ejemplos en que encadenamos la ejecución de comandos.

ComandosFunción
:w | qGuarda los cambios del documentos y lo cierra.
:17,20y | 122putCopiar las líneas de la 17 a la 20 y las pega en la línea 122.

Otras fuentes

https://vim.rtorr.com/lang/es_es
https://vim.fandom.com/wiki/Vim_buffer_FAQ
https://www.atareao.es/tutorial/vim/buscar-y-reemplazar-en-vim/

Categorías: Linux
Artículos Relacionados