Temporada 01: iniciándose en Vim

03. Vim: edición inteligente

Publicado por

Si seguiste el tutorial de Vim que mencioné en la entrada anterior habrás notado que para sacarle más provecho al editor, hay que pasar el menor tiempo posible en modo -- INSERTAR --. Esta nota se enfoca en algunas órdenes bastante interesantes que puedes darle al editor para que él haga el trabajo por ti. Todas ellas en modo -- NORMAL --. Al terminar de leer este artículo serás capaz de editar más eficientemente tus documentos de texto utilizando Vim, navegar por todo el archivo y corregir equivocaciones que hayas tenido al escribir texto nuevo o editar el existente.

Para que nuestra comunicación a lo largo del resto de esta serie sea efectiva, es necesario utilizar un lenguaje común, sobre todo cuando se trata de comunicar ideas nuevas. Así que es posible que en el futuro regreses a esta lista para consultarla:

  • <C-v> y ^v significan lo mismo: pulsar la tecla Ctrl junto con la tecla v.
  • <M-v> significa pulsar la tecla Shift seguido de la tecla v, o sea una v mayúscula (V).
  • Si se quiere expresar una orden en modo normal, visual o como parte de un script, se escribe tal cual (cw).
  • Si se quiere expresar una orden en modo comando, se utiliza el símbolo “dos puntos” como prefijo (:wq!).
  • -- NORMAL --, -- INSERTAR -- y -- VISUAL -- (con sus variantes), se utilizarán para nombrar los modos normal, insertar y visual, respectivamente.

Si se requiere definir alguna otra manera de expresar ideas, lo haré en su momento, pero por ahora, con estas es suficiente.

Deshacer, rehacer… y repetir

En Vim, los bien conocidos y queridos deshacer (^z o Ctrl + z) y rehacer (^y o Ctrl + y) tienen un rostro diferente. En lugar utilizar ^z para deshacer el último cambio, el editor nos proporciona el comando u (undo); y para rehacer un cambio, podemos usar la combinación de teclas ^r (re do).

Deshacer y rehacer cambios en Vim
Deshacer y rehacer cambios en Vim

Una cosa extremadamente útil, por más pequeña que parezca es el comando punto ., que nos permite repetir la última orden que haya modificado el buffer actual. No hay que confundir esto con rehacer el último cambio, ^r simplemente vuelve a aplicar un cambio deshecho previamente. El comando punto (.) por otro lado, ejecuta nuevamente el comando anterior que modificó el contenido del buffer en la posición actual del cursor.

El comando "Punto"
El comando «Punto»

Más que edición de caracteres

Otra ventaja que nos ofrece el editor es la posibilidad de manipular objetos de texto, moviendo el cursor a través de ellos en combinación con comandos de edición. Para Vim el contenido de un archivo es más que una colección de caracteres; el editor reconoce ciertos objetos en el buffer, objetos de texto. También es posible indicar más de una manera de movernos a través del texto; puedes decirle a Vim que avance una palabra, un párrafo o hasta determinado caracter; incluso puedes utilizar repetidores (esto es opcional) para indicar la cantidad de objetos que te quieres mover, por ejemplo: cinco palabras, tres párrafos o diez etiquetas. La combinación de estos simples aspectos resulta en una explosión de posibilidades que te facilitará mucho la tarea de edición.

La sintaxis que para darle instrucciones de este tipo al editor luce más o menos así:

<operador>[contador|movimiento]<objeto>

Muy bonito, pero ahora hay que explicar esta sintaxis. La partícula “contador” no es más que un número entero, y representa el número de objetos sobre los que quieres aplicar el operador. Las demás partículas requieren un poco más de explicación.

Operadores

La partícula “operador” le indica al editor que debe aplicar una función que modifica el texto, recuerda que la idea es indicarle a Vim lo que quieres y dejar que lo haga por ti. Para los propósitos de esta nota quiero listar tres, pero no son los únicos. Si tienes curiosidad sobre los demás, siempre puedes consultar la ayuda en línea que Vim te ofrece, pero tal vez después haga una nota sobre ellos.

  • d Borrar/cortar (delete/cut).
  • c Cambiar (change).
  • y Copiar (yank).

Movimientos

A través de los movimientos podrás indicarle al editor hasta/hacia dónde quieres que mueva el cursor o sobre qué región del objeto quieres que aplique el operador de edición. Es otra monería que te ahorrará mucho tiempo.

  • a Todo (all).
  • i Dentro de (in, inside).
  • t Hasta (‘til, una forma abreviada de until).
  • f Encuentra hacia adelante (find forward).
  • F Encuentra hacia atrás (find backward).

Objetos de texto

En el tutorial de Vim se encuentra una pequeña demostración del objeto de texto más pequeño: la palabra. Pero existen otros: oraciones, párrafos, etiquetas (como las etiquetas de HTML), citas (texto entre comillas simples o dobles) y bloques.

  • w Palabra (word).
  • s Oración (sentence).
  • p Párrafo (parragraph).
  • t Etiqueta (tag).
  • ' , " Cita, texto entre comillas simples o dobles.
  • [ , ( , { , < Bloque, texto entre paréntesis redondos o angulares, corchetes o llaves.

De este modo puedes decirle rápidamente a Vim cosas como: “Borra todo el párrafo en donde se encuentra el cursor” (dap), “Cambia el texto entre comillas por la palabra ‘hola’ ” (ci"hola), “Corta el texto desde el cursor dos palabras hacia adelante” (d2w).

Aquí hay una sutileza que aclarar, y es que las partículas s y p son también operadores de edición, solo que en este contexto los empleamos para representar objetos de texto, todo depende de la posición dentro del comando: la primera partícula es el operador, a menos que sea un número. Otro caso especial es la partícula t, que además de representar al objeto “etiqueta”, en el contexto anterior significa “muévete hasta”, por ejemplo en: “Corta el texto dentro de la etiqueta” (dit), la partícula t significa “etiqueta” puesto que ya se utilizó la partícula i para indicar el movimiento. Por otro lado en: “Copia hasta la siguiente S“ (ytS), la partícula t representa el movimiento “hasta” porque la precede el operador “copia” (y).

Por ejemplo podemos manipular todo el contenido de una etiqueta en, digamos un documento HTML, cortarlo de su ubicación original y pegarlo en otro lado.

Manipulando objetos de texto
Manipulando objetos de texto

Nota que para eliminar el texto dentro de la etiqueta (su contenido), lo único que necesitas es que el cursor se encuentre situado sobre cualquier parte de la etiqueta, no necesariamente sobre el texto que quiero cortar en si.

Otros ejemplos que puedes practicar son:

  • diw Borra el texto dentro de la palabra.
  • daw Borra todo el texto de la palabra, esto incluye los espacios al rededor de la palabra.
  • dis Borra el texto dentro de la oración (sentence).
  • ya" Copia todo el texto entre comillas dobles, incluyendo las comillas.
  • cisCorra el texto de toda la frase y cambia a modo -- INSERTAR --.

En este punto puedes dar rienda suelta a tu creatividad y jugar con las combinaciones que quieras.

7 comments

  1. Estupenda lección, así da gusto introducirse a VIM, pero una pregunta, ¿Cómo se configura el tabulado? Creo que por defecto tiene que meter cerca de 8 carácteres

    1. Gracias ¡Qué bueno que fue de tu agrado!

      Sobre tu pregunta, tienes razón. Por defecto un tabulador cuenta por ocho espacios. Si quieres ajustar este valor, la opción se llama «tabstop» y su abreviatura es «ts». Si quieres más detalles sobre cómo utilizar esta opción, te recomiendo ver la ayuda: «:help ‘tabstop'». De cualquier modo tengo pensado incluir una nota en esta serie explicando cómo utilizar varias opciones de Vim, incluyendo esta y otras relacionadas.

      Saludos

Responder a diacus Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *