Secretos del texto en vim.

Objetos de texto en Vim (como el maestro yoda lo usa).

[texto en vim

En este articulo voy a mostrarte como manejar el texto en vim mas fácilmente.

Una de las ventajas que vim nos pone a disposicion es el modo en que ve el contenido del archivo que estamos editando.
Si bien para nosotros “el texto es texto”, para vim no es tan asi.

Vim entiende y trata el texto no como una simple cadena de caracteres como la mayoria de los editores, sino que lo “ve” como objetos.
Esto nos provee de varias ventajas frente a otros editores de texto. ¿Porque? pues porque al saber de que tipo de texto se trata vim puede manejarlo de diferentes maneras.

Imaginate que en tu editor de textos tenes que moverte entre parrafos enteros solamente, ¿que tan facil te resulta hacer eso?. Si tienes que usar el mouse ya pierdes tiempo, y si tienes que pulsar varias teclas tambien… En otro caso ¡Seguro que estas usando vim! :)

En este articulo no pretendo poner la tipica lista de super comandos de vim con lo que haces un monton de cosas, sino enseñarte que todas esas combinaciones no tenes porque aprenderlas de memoria ya que (aunque no lo parezca) tienen un sentido y un significado que no es para nada dificil de aprender.

Lo primero que necesitamos aprender es ver como vim identifica el texto para que podamos movernos mas facilmente sobre el.

1
2
3
palabra = word en ingles
fin = end en ingles
atras = back.. (adivina en que idioma..)
1
2
sentencia = sentence Usa '(' o ')' para navegar entre sentencias
parrafo = paragraph Usa '{' o '}' para navegar entre parrafos

Ok ok, eso ya lo se geniecillo… ¿y que con eso?, pues que vim usa las siglas
de esas palabras como comandos… :P

Osea que si deseas moverte entre palabras, lo unico que tenes que hacer es presionar en
modo comandos la letra w (de word), si deseas ir una palabra hacia atras
presiona b (de back ), si deseas ir al final de una palabra simplemente presiona
e (de end). Aja! ¿y que pasa con las sentencias? pues para las sentencias y
parrafos vim tambien usa las siglas (pero de otra manera).

Simplemente quedate con el concepto de que te podes mover mas facilmente usando ( para las
sentencias y { para los parrafos por ahora… :)

Y de que me sirve saber todo esto?. Ya lo vas a ver no te impacientes…

Resulta que vim tambien usa siglas para referirse a los comandos mas usados,
siguiendo con las tablitas estas serian:

1
2
3
4
5
borrar = d -> delete en ingles
copiar = y -> yank en ingles
cambiar = c -> change en ingles
buscar = f -> find en ingles
visual = v -> visual ¿impensable verdad?

mmm ya estas captando el concepto verdad?

Siguiendo con el ejemplo…

1
2
3
4
5
6
7
8
9
d para borrar
c para cambiar.
y para copiar.
f para buscar una letra en la linea.
v para seleccionar.

Existen mas ordenes que no las listo aca para no salirnos demasiado de tema,
pero que son de mucha utilidad conocer.

Si presionas alguno de las ordenes anteriores vas a notar que no pasa nada
(excepto en la de seleccionar “ v “ y en la de buscar una letra “ f “).

Esto pasa porque estas ordenes esperan que pulsemos una tecla de movimiento las
cuales pueden ser las que vimos arriba ( w b e s p ).

Por ejemplo si quisieramos borrar una palabra tendriamos que pulsar dw o cw si
deseamos cambiarla…

Pero aun hay mas asique no te apresures joven padawan…

baby
Los objetos de texto en vim tienen 2 modos de trabajar.

1
2
i = inner
a = a o un o una etc...

Estos 2 ¿nuevos? operadores le dicen a vim el ambito donde queremos realizar la operacion.

inner significa interior

a tiene varios significados pero para el caso significa incluyendo.

Osea que si tenemos esta linea.

>”Una linea de texto”<
y tecleamos la orden da” dentro de la linea se eliminaria todo el texto (junto con las comillas).
En caso contrario si tecleamos di” se eliminaria solamente el texto dentro de
las comillas pero no las comillas, quedando asi:
>< Comando ( da” )

>””< Comando ( di” )
De esta manera podemos formar comandos y recordarlos muy facilmente como vemos:

1
2
3
4
5
6
diw se traduce como delete inner word (eliminar la palabra interior.
daw se traduce como delete a word (eliminar una palabra)
dis se traduce como delete inner sentence (eliminar una sentencia pero dejando los espacios alrededor )
das se traduce como delete a sentence (eliminar una sentencia)
dip se traduce como delete inner paragraph (eliminar un parrafo excluyendo el espacio previo)
dap se traduce como delete a paragraph (eliminar un parrafo)

Ok ok pero si eso es todo te mato ¡quiero mas!! :)

mas.jpeg

1
dib se traduce como delete inner block '(' ')' ()' (eliminar todo el bloque incluyendo los parentesis

Estas ordenes pueden hacerse tambien de forma explicita, por ejemplo:

1
2
3
4
5
6
7
8
di" Borraria todo lo que este dentro de """ pero excluiria las comillas
da" Borraria todo lo que este dentro de """ incluyendo las comillas
di[ Borraria todo lo que este dentro de [] pero excluiria los corchetes
da[ Borraria todo lo que este dentro de [] incluyendo los corchetes.
di{ Borraria todo lo que este dentro de {} incluyendo los corchetes.
da{ Borraria todo lo que este dentro de {} pero excluiria los corchetes
di( Borraria todo lo que este dentro de () incluyendo los corchetes.
da( Borraria todo lo que este dentro de () pero excluiria los corchetes

¿y si deseo borrar una etiqueta html o xml como hago?

simple, supongamos la siguiente etiqueta:

1
<div id="contenedor"><article> Mi articulo </article></div>

Si nos posicionamos en alguna parte de la declaracion del div y ejecutamos dit
vim se va a dar cuenta de que lo que queremos borrar es todo lo que esta dentro
de del div dejandolo asi:

1
<div id="contenedor"></div>

Por el contrario, si nos posicionamos en alguna parte de la declaracion del
article y ejecutamos dit vim va a borrar todo el contenido del articulo
dejandolo asi:

1
<div id="contenedor"><article></article></div>

¿genial no?

1
2
dit Borra todo el contenido que este dentro del tag
dat Borra todo el tag

mmmm y solo puedo borrar texto en vim? bahh…

Por supuesto que no solamente podes borrar texto en vim ¿de que serviria si fuera solo eso?

Con los comandos que aprendimos recien podemos borrar facilmente objetos de
texto, ahora si remplazamos la orden de eliminar d por la c de change la cosa
tomaria todavia mas color ya que no necesitariamos estar presionando i en cada
momento para pasar al modo insercion, y adivina que.. ¡Todo lo que vimos para
borrar se aplica para cambiar!!

Si desearamos cambiar una sentencia seria:

1
2
3
4
cis change inner sentence
cas change a sentence
cip change inner paragraph
cap change a paragraph

etc… y como te imaginaras todo el resto es igual.. :)

mmm hasta ahora me venis convenciendo… ¿pero que mas puede hacer con el texto vim?

Bueno, las ordenes de movimiento son siempre las mismas como te habras dado cuenta, (espero sino…)

w = word para moverse entre palabras.

b = back para ir al comienzo de una palabra.

e = end para ir al final de una palabra.

f = find para ir a la posicion del caracter que presionemos

s = sentence para referirse a la sentencia completa.

( para moverse desde donde estamos al comienzo de la sentencia.

) para moverse desde donde estamos al final de la sentencia.

{ para moverse al comienzo del parrafo

} para moverse al final del parrafo.

Y que pasaria si usaramos estos comandos de movimiento para seleccionar el texto en vim?, ¿funcionaria? ¡pues claro!

viw y vaw seleccionan una palabra (incluyendo o no los espacios segun sea i o a )

vip y vap seleccionan un parrafo completo.

vis y vas seleccionan una sentencia completa.

vi( y va( seleccionan una sentencia a partir de la posicion actual hasta el comienzo.

vi) y va) seleccionan una sentencia a partir de la posicion actual hasta el final.

vi{ y va{ seleccionan un parrafo a partir de la posicion actual hasta el comienzo.

vi} y va} seleccionan un parrafo a partir de la posicion actual hasta el final.

En el modo de seleccion, existe un operador que sirve para decirle a vim hacia
adonde orientar el cursor de seleccion, este operador es la o y con pulsarla
simplemente, veremos como vim cambia la orientacion del cursor para facilitarnos
seleccionar texto (muy util). :)

Y como te imaginaras, para copiar es el mismo rollo que con las demas
operaciones, asique te lo dejo a tu investigacion… :)

texto en vimCon este articulo pretendo aclararte un poco las dudas acerca de los objetos de
texto en Vim y mostrarte la manera sencilla de recordarlos. Como sabras quedaron muchos comandos (no tan relevantes para el tema) en el tintero, asique te aconsejo investigarlos y tenerlos siempre a mano para
asi poder editar texto en vim de una manera mas eficiente y rapida, aca te dejo algunos enlaces de interes que te pueden interesar sobre le tema,

Un pequeño manual sobre vim echo por la gente de hackxcrack muy recomendado

Un articulo sobre algunos comandos de vim (tambien recomendable)

Un tutorial interactivo para aprender vim (muy muy bueno)

Una guia de como instalar plugins facilmente en vim

Un tutorial de EasyMotion (para moverse fácilmente por el texto)

 

espero que no te hayas aburrido mucho y que lo hayas disfrutado leyendo tanto como yo
haciendolo. ¡Vimvenido a la fuerza! :)

Comentarios