domingo, 1 de marzo de 2009

HAL y vim (IV)

En las tres sesiones anteriores hemos dado buena cuenta de las opciones básicas del menú "Archivo" de un procesador de textos y hemos visto cómo realizar esas mismas funciones desde Vim. Tocaría ahora entrar en el meollo del asunto, que no es otro que las funciones de edición propiamente dichas.

Ahora bien, es evidente que casi todas las acciones relativas a la edición presuponen un elemental saber, la capacidad de orientarse y recorrer el texto que se edita y, como consecuencia, la facultad de situar el cursor a voluntad dentro del documento. En los procesadores de texto este movimiento se realiza muy frecuentemente con el ratón o con las teclas de movimiento (las flechas). En el Vim "puro y duro" que estamos presentando no dispondremos del ratón ni tampoco vamos a recurrir a las flechas. Una constricción tan aparentemente brutal parece cosa de locos: "vaya con Vim ---pensará el lector---, cómo se las juega el amigo. Ahora que le empezábamos a coger el gustillo, nos deja tirados o, mejor, atados de pies (sin ratón) y de manos (sin flechas)".

Si Vim tuviese sentimientos podría gritar como Gimli, el enano de The Lord of the Rings, cuando al caer del caballo en situación embarazosa nos sale con aquello de: "it was deliberated". Vim no es Gimli, pero más de una cosa tiene en común con él; por ejemplo, que es minúsculo en cuanto a consumo de recursos o que sus usos y costumbres nos resultan a bote pronto incomprensibles. También Vim puede exclamar con orgullo que no disponer de ratón ni de flechas es algo hecho adrede.

¡Y tanto! Porque nuestras teclas de movimiento van a ser las mismas que usamos para escribir el documento; pulsadas, por supuesto, en el modo o teclado de órdenes. Esto es tan grotesco para el usuario ajeno al mundo de Vim como el hecho de que las mujeres enanas tengan barba. Sin embargo, los virtuosos de Vim defenderán con uñas y dientes que usar las teclas normales para recorrer el documento es uno de los mejores inventos gestados en el submundo de Vim. Seguro que el lector conocerá algún día, o se convertirá algún día, en un profeta belicoso de Vim, que mirará con despecho a los pobres lerdos que todavía siguen teniendo que apartar sus manos del centro del teclado para moverse por el documento como elefantes en una cacharrería.

Tendremos, pues, que detenernos en este punto, el de la orientación y movimiento sobre la espartana interfaz de Vim.

La primera consideración que hay que llevar a cabo en este sentido es de índole casi filosófica. Atiéndase, no obstante, con la mayor intensidad posible, porque va a deparar hallazgos de un valor incalculable.

Si estuviésemos delante de un texto escrito en un idioma incomprensible y tuviésemos que descifrarlo, lo primero que veríamos sería una textura peculiar. Si aplicásemos nuestro esfuerzo a determinar los ingredientes o unidades constitutivas de esa textura, llegaríamos a identificar ciertos objetos o estructuras peculiares.

Algunas tendrían que ver con el mero soporte físico en que se nos presenta el texto:

  • Hojas en que se despliega o, si el texto, se presenta en un monitor, pantallas que ocupa.

  • Líneas en que se divide dentro de cada hoja o pantalla.

  • ...

Otras serían objetos puramente textuales:

  • Letras o caracteres, es decir, los átomos de la textura.

  • Agrupaciones de letras o caracteres separados por espacios o signos de puntuación, esto es, palabras.

  • Agrupaciones de palabras separadas por caracteres especiales (el punto y los signos de cierre de interrogación y admiración), esto es, frases.

  • Agrupaciones de frases separadas por líneas en blanco, esto es, párrafos.

  • ...

Para ilustrar con un caso concreto un análisis de este tipo, supongamos que en nuestro monitor aparece, ocupando una pantalla completa, un texto bien conocido por nosotros, pero que imaginaremos escrito en una lengua incomprensible. Mediante el análisis de la textura identificaríamos objetos de distintas clases. Aquí marcaremos, a modo de ejemplo, algunos de ellos: sus líneas, que numeramos; las siete primeras palabras (en verde), incluida la coma que consideraremos en principio, junto con otros signos de puntuación, como una palabra independiente; la segunda frase (resaltada) y el segundo párrafo (entre llaves):

1 En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha
2 mucho tiempo que vivía un hidalgo de los de lanza en astillero,
3 adarga antigua, rocín flaco y galgo corredor. Una olla de algo más
4 vaca que carnero, salpicón las más noches, duelos y quebrantos los
5 sábados, lantejas los viernes, algún palomino de añadidura los
6 domingos, consumían las tres partes de su hacienda. El resto della
7 concluían sayo de verlarte, calzas de velludo para las fiestas, con
8 sus pantuflos de lo mesmo, y los días de entresemana se honraba con
9 su vellorí de lo más fino.
10 {
11 Tenía en su casa una ama que pasaba de los cuarenta y una sobrina
12 que no llegaba a los veinte, y un mozo de campo y plaza, que así
13 ensillaba el rocín como tomaba la podadera.}

Pues bien, éste justamente es el análisis que hace Vim de cualquier fragmento de texto, un análisis que pone a nuestra disposición un mapa estructural que nos permitirá orientarnos fácilmente mientras editamos.

La primera aplicación concreta de este mapa es la facultad de moverse rápidamente por los objetos textuales. Vim proporciona numerosas opciones para ejecutar tales movimientos desde el teclado de órdenes. El conocimiento y dominio de, al menos, unas cuantas, es de vital importancia para recorrer el texto a voluntad y para manipular sus componentes. Veamos algunas. El punto de referencia inicial es siempre la posición del cursor. En las descripciones que siguen se indica el lugar al que el cursor acabará desplazado:

  • Pantalla:

    H
    Primera línea (Home) en la pantalla.

    L
    Última línea (Last) en la pantalla.

  • Línea:

    0
    Comienzo de la línea actual.

    $
    Final de la línea actual.

    gg
    Primera línea del documento completo.

    G
    Última línea del documento completo.

  • Párrafo:

    {
    Comienzo del párrafo actual; o del anterior, si ya estamos al comienzo del actual. Grosso modo, moverse por párrafos hacia delante.

    }
    Comienzo del párrafo siguiente; o final del actual, si no hay ningún otro. Grosso modo, moverse por párrafos hacia atrás.

  • Frase:

    (
    Comienzo de la frase actual (una frase se define por los caracteres con que termina, por defecto, '.', '!' o '?' seguido de fin de línea o un espacio o un tabulador); o comienzo de la frase anterior, si ya estamos al comienzo de la actual. Grosso modo, moverse por frases hacia delante.

    )
    Comienzo de la frase siguiente; o final de la actual si ya estamos en la última frase. Grosso modo, moverse por frases hacia atrás.

  • Palabra:

    w
    Comienzo de la palabra (word) siguiente.

    W
    Comienzo de la palabra siguiente, pero sin considerar los signos de puntuación y otros símbolos como palabras.

    e
    Final (end) de la palabra actual.

    E
    Final de la palabra actual, pero sin considerar los signos de puntuación y otros símbolos como palabras.

    b
    Comienzo (back) de la palabra anterior.

    B
    Comienzo de la palabra anterior, pero sin considerar los signos de puntuación y otros símbolos como palabras.


Naturalmente, también son posibles los movimientos microscópicos, es decir, los movimientos que el usuario de procesadores de texto acostumbra a realizar con las "flechas". Vim proporciona teclas mucho más convenientes por su proximidad a la mano y considera una deshonra emplear para este fin las flechas:

  • Carácter:

    h
    Un paso a la izquierda.

    j
    Un paso abajo.

    k
    Un paso arriba.

    l
    Un paso a la derecha.


Expresado gráficamente:

^
|
|

k
<--- h l --->
j

|
|
v

Todos estos movimientos se pueden enriquecer, indicando, antes de pulsar la tecla de movimiento en cuestión, el número de veces que se desea repetir el movimiento. Es una especie de multiplicación de un movimiento dado. Aunque esto parezca el rizo del rizo, muchos usuarios de Vim son propensos a tales malabarismos. Así, por ejemplo, 3w mueve el cursor tres palabras hacia delante y 3b tres palabras hacia atrás.

Un caso especial de este tipo de "multiplicaciones", éste sí, usado por todos los usuarios de Vim, es el referente a las líneas. Por ejemplo, 11G mueve el cursor a la línea 11. Tal tipo de desplazamiento a una línea mediante la indicación de su número carecería de sentido si no pudiésemos visualizar en todo momento dicho número. Para mostrarlo, se utiliza la orden :set number, que es un conmutador, esto es, posee una orden que realiza la función inversa, la de ocultarlos, :set nonumber.

Especialmente adecuados cuando se trata de moverse a un fragmento de texto concreto dentro del documento son los movimientos de búsqueda hacia delante y hacia atrás respecto de la situación actual del cursor:

  • Texto:

    /texto
    Mueve el cursor hacia delante hasta el comienzo de la primera ocurrencia del texto indicado.

    ?texto
    Mueve el cursor hacia atrás hasta el comienzo de la primera ocurrencia del texto indicado.


Estas dos órdenes funcionan de la siguiente manera:

  1. Se teclea /texto o ?texto.

  2. Se pulsa 'Enter' para fijar la búsqueda.

  3. Opcionalmente, se puede continuar la búsqueda más allá de la nueva posición alcanzada por el cursor, mediante las teclas n ---seguir (next) buscando hacia delante--- o N ---seguir buscando hacia atrás.


Por ejemplo, suponiendo que el cursor está situado en la primera línea del texto anteriormente citado, /más, seguido de 'Enter', seguido de n, situará el cursor en la palabras "más" que aparece en la cuarta línea.

Finalmente, también es interesante conocer, al menos, dos de las opciones para pasar página en un texto largo, es decir, para deslizarse de una pantalla a otra. Este es uno de los relativamente pocos casos en que hay que recurrir a la tecla 'Ctrl':

  • Pantalla:

    Ctrl-F
    Una pantalla hacia delante (Forward).

    Ctrl-B
    Una pantalla hacia atrás (Backward).


Conocer y dominar todas estas formas de desplazamiento por la interfaz de Vim lleva tiempo. El usuario debe aprenderlas poco a poco ---ya habrá empezado a hacerlo, se entiende, al hilo de esta exposición; y, si no, mal nos va---. Una buena recomendación, aparte de la de realizar ejercicios por su cuenta, es limitarse en un principio a los movimientos pequeños (h, j, k, l) e ir introduciendo progresivamente movimientos a objetos de texto de mayor nivel. Todo esto parece complicado y engorroso, y lo es al principio, negarlo no sería honesto. Pero no es más duro que aprender mecanografía, y todos, con mayor o menor acierto, la hemos aprendido sobre la marcha. Nadie dijo que trabajar en las minas del enano fuera cosa fácil o simplona. La complejidad, sin embargo, tiene una recompensa. Preferir el ratón o las flechas a este endiablado teclado de Vim es como preferir un gusano a un tarsero. El lector decide. El pequeño primate es huidizo y algunos dicen que diabólico, pero incomparablemente más ágil, y más bello.


Resumen

  • Vim analiza el texto que se edita según los elementos físicos que lo componen (pantalla, líneas, etc.) y su textura (caracteres, palabras, frases, párrafos, etc.).

  • Este análisis del texto permite disponer de un mapa en que el orientarse para realizar cualquier operación de edición.

  • Vim ofrece una gran cantidad de posibilidades de movimiento por el texto [ver algunas en las listas que constan en este artículo].

  • La orden de Vim :set number hace visibles los números de líneas; :set nonumber los oculta.

No hay comentarios:

Publicar un comentario