Guia-Vim.pdf

download Guia-Vim.pdf

of 116

Transcript of Guia-Vim.pdf

  • Vim: Referencia rpidaJoaqun Ataz LpezMurcia, Diciembre de 2004

    Copyright (c) 2004 Joaqun Ataz Lpez.

    Permission is granted to copy, distribute and/or modify this document under theterms of the GNU Free Documentation License, Version 1.2 or any later ver-sion published by the Free Software Foundation; with no Invariant Sections, noFront-Cover Texts, and no Back-Cover Texts. A copy of the license is includedin the section entitled GNU Free Documentation License.

    (Se otorga permiso para copiar, distribuir o modificar este documento en los tr-minos de la Licencia GNU para Documentacin Libre, versin 1.2 o cualquierversin posterior publicada por la Free Software Foundation; sin secciones in-variantes, sin textos de la cubierta frontal y sin textos de la cubierta posterior.Una copia completa de la licencia (en ingls) se incluye en la seccin tituladaGNU Free Documentation License).

  • ndice generalI Introduccin 6

    Sobre esta gua 7

    1. Ideas bsicas sobre Vim 81.1. Qu es Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2. Las versiones de Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3. Empezar y terminar la ejecucin de Vim . . . . . . . . . . . . . . . . . . 91.4. Obtencin de ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2. Las nociones fundamentales de Vim 132.1. Modos de Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.1.1. Los modos fundamentales . . . . . . . . . . . . . . . . . . . . . 142.1.2. Otros modos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.1.3. Teclas para cambiar entre los modos . . . . . . . . . . . . . . . . 142.1.4. Saber en qu modo estamos . . . . . . . . . . . . . . . . . . . . 16

    2.2. Comandos de Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2.1. Comandos de ejecucin inmediata . . . . . . . . . . . . . . . . . 162.2.2. Comandos de lnea de comandos . . . . . . . . . . . . . . . . . . 172.2.3. Otras cuestiones relacionadas con los comandos . . . . . . . . . . 19

    2.3. Indicacin del mbito en los comandos . . . . . . . . . . . . . . . . . . . 212.3.1. Objetos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3.2. Seleccionar texto en Vim: El modo visual . . . . . . . . . . . . . 242.3.3. Indicacin manual de rangos . . . . . . . . . . . . . . . . . . . . 26

    3. Comandos para el movimiento del cursor 283.1. Comandos especficamente dirigidos a mover el cursor. . . . . . . . . . . 28

    3.1.1. Movimientos simples del cursor . . . . . . . . . . . . . . . . . . 293.1.2. Movimientos basados en el reconocimiento de objetos . . . . . . 313.1.3. Movimientos por y entre lneas . . . . . . . . . . . . . . . . . . . 323.1.4. Movimientos horizontales y saltos de lnea . . . . . . . . . . . . 333.1.5. Bsqueda de caracteres en la lnea . . . . . . . . . . . . . . . . . 34

    3.2. Comandos que pueden producir un movimiento del cursor . . . . . . . . 343.2.1. Scroll de la pantalla . . . . . . . . . . . . . . . . . . . . . . . . . 343.2.2. Emparejamiento de caracteres . . . . . . . . . . . . . . . . . . . 353.2.3. Bsqueda de palabras . . . . . . . . . . . . . . . . . . . . . . . . 36

    3.3. Marcas y saltos entre partes del documento . . . . . . . . . . . . . . . . 393.3.1. Marcas automticas . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.2. Marcas manuales . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    2

  • ndice general

    3.3.3. Navegar por el documento . . . . . . . . . . . . . . . . . . . . . 40

    II Modificacin del texto 42

    4. Comandos elementales de manipulacin del texto en el modo normal 434.1. Comandos para borrar texto . . . . . . . . . . . . . . . . . . . . . . . . . 43

    4.1.1. Los comandos d, dd, c, cc y J . . . . . . . . . . . . . . 434.1.2. Abreviaturas para d y c . . . . . . . . . . . . . . . . . . . . 44

    4.2. Cortar, Copiar y pegar texto . . . . . . . . . . . . . . . . . . . . . . . . . 454.2.1. Pegar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.2.2. Copiar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.2.3. Uso del porta-papeles . . . . . . . . . . . . . . . . . . . . . . . . 464.2.4. Uso de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    4.2.4.1. Registros en general . . . . . . . . . . . . . . . . . . . 464.2.4.2. Registros especiales . . . . . . . . . . . . . . . . . . . 474.2.4.3. El agujero negro y el registro de expresiones . . . . . . 48

    4.2.5. Los comandos :copy y :move . . . . . . . . . . . . . . . . . 484.3. Sustitucin global de texto . . . . . . . . . . . . . . . . . . . . . . . . . 48

    4.3.1. El comando :substitute . . . . . . . . . . . . . . . . . . . . . . 484.3.2. Indicadores de la sustitucin . . . . . . . . . . . . . . . . . . . . 49

    4.4. Los comandos :global y :normal . . . . . . . . . . . . . . . . . . . . 50

    5. Gestin de lneas, sangrados y tabuladores 525.1. Lneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    5.1.1. Los saltos de lnea en los editores de texto . . . . . . . . . . . . . 525.1.2. Insercin automtica de saltos de lnea . . . . . . . . . . . . . . . 535.1.3. Reformateo de lneas: el comando gq . . . . . . . . . . . . . . 535.1.4. Alineacin de texto . . . . . . . . . . . . . . . . . . . . . . . . . 53

    5.2. Saltos de tabulador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.2.1. Saltos de tabulador blandos y duros . . . . . . . . . . . . . . . . 545.2.2. Variables de Vim que controlan el tabulador . . . . . . . . . . . . 555.2.3. El comando :retab . . . . . . . . . . . . . . . . . . . . . . . . 56

    5.3. Sangrado de lneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.3.1. Comandos para controlar el sangrado . . . . . . . . . . . . . . . 565.3.2. Mtodos de sangrado . . . . . . . . . . . . . . . . . . . . . . . . 57

    6. Otros cambios 596.1. Sustitucin simple de texto (comando r) . . . . . . . . . . . . . . . . . 596.2. El modo de reemplazo . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.3. Cambiar maysculas/minsculas . . . . . . . . . . . . . . . . . . . . . . 596.4. Sumar y restar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.5. Encriptar el fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606.6. Deshacer, rehacer y repetir cambios . . . . . . . . . . . . . . . . . . . . 61

    7. Comandos para manipulacin del texto en los modos visual y de insercin 637.1. Modificacin del texto desde el modo visual . . . . . . . . . . . . . . . . 63

    7.1.1. Insertar el mismo texto en varias lneas . . . . . . . . . . . . . . 637.1.2. Otros cambios en el modo visual . . . . . . . . . . . . . . . . . . 647.1.3. El modo de seleccin . . . . . . . . . . . . . . . . . . . . . . . . 64

    3

  • ndice general

    7.2. Comandos en el modo de Insercin . . . . . . . . . . . . . . . . . . . . . 657.2.1. Ejecutar comandos del modo normal desde el modo de insercin . 657.2.2. Movimientos del cursor en el modo de insercin . . . . . . . . . 657.2.3. Comandos especiales para la insercin de texto . . . . . . . . . . 65

    7.2.3.1. Los comandos generales de insercin . . . . . . . . . . 667.2.3.2. Insertar caracteres especiales . . . . . . . . . . . . . . 667.2.3.3. Comandos para el sangrado . . . . . . . . . . . . . . . 67

    7.2.4. Hacer correcciones en el modo insercin . . . . . . . . . . . . . 677.2.5. Autocompletado . . . . . . . . . . . . . . . . . . . . . . . . . . 677.2.6. Abreviaturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    III Ficheros, ventanas y visualizacin 70

    8. Trabajo con ficheros 718.1. Cuestiones generales sobre ficheros . . . . . . . . . . . . . . . . . . . . 71

    8.1.1. Buffers y ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . 718.1.2. Abandonar un fichero que ha sufrido modificaciones . . . . . . . 72

    8.2. Abrir y guardar ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . 728.2.1. El comando :edit . . . . . . . . . . . . . . . . . . . . . . . . . 728.2.2. Grabar un fichero (o sus cambios) en disco . . . . . . . . . . . . 738.2.3. Copias de seguridad . . . . . . . . . . . . . . . . . . . . . . . . 74

    8.3. Cmo localizar los ficheros . . . . . . . . . . . . . . . . . . . . . . . . . 748.3.1. El explorador de ficheros de Vim . . . . . . . . . . . . . . . . . . 758.3.2. Buscar un fichero . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    8.4. Editar simultneamente varios ficheros . . . . . . . . . . . . . . . . . . . 768.5. La lista de buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788.6. Otras operaciones con ficheros . . . . . . . . . . . . . . . . . . . . . . . 79

    9. Ventanas 809.1. Crear ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    9.1.1. Comandos expresos de creacin de ventanas . . . . . . . . . . . 809.1.2. Creacin de ventanas como consecuencia adicional de ciertos co-

    mandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809.2. Circular entre las ventanas y cambiarlas de posicin . . . . . . . . . . . . 819.3. Ajustar el tamao de las ventanas . . . . . . . . . . . . . . . . . . . . . . 829.4. Cerrar ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    10. Comandos para la visualizacin 8410.1. Resaltado de sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    10.1.1. Reconocimiento de sintaxis . . . . . . . . . . . . . . . . . . . . 8410.1.2. Ajuste de colores . . . . . . . . . . . . . . . . . . . . . . . . . . 8510.1.3. Desactivar el reconocimiento de sintaxis . . . . . . . . . . . . . . 85

    10.2. Plegado de documentos . . . . . . . . . . . . . . . . . . . . . . . . . . . 8510.2.1. Comandos para plegar . . . . . . . . . . . . . . . . . . . . . . . 8610.2.2. Guardar y restaurar pliegues . . . . . . . . . . . . . . . . . . . . 8710.2.3. Mtodos de plegado . . . . . . . . . . . . . . . . . . . . . . . . 87

    4

  • ndice general

    IV Otros aspectos de Vim 89

    11. Utilidades adicionales 9011.1. Recuperacin despus de una cada del sistema . . . . . . . . . . . . . . 90

    11.1.1. Ficheros swap de Vim . . . . . . . . . . . . . . . . . . . . . . . 9011.1.2. Otras cuestiones relacionadas con los ficheros swap . . . . . . . . 91

    11.2. Conexin con comandos del sistema operativo . . . . . . . . . . . . . . . 9111.3. Recordar el lugar en el que abandonamos Vim . . . . . . . . . . . . . . . 9311.4. Comprobar diferencias entre dos ficheros con Vimdiff . . . . . . . . . . . 9411.5. Grabar y reproducir comandos . . . . . . . . . . . . . . . . . . . . . . . 9511.6. Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    12. Personalizacin de Vim 9712.1. El fichero de personalizacin de Vim . . . . . . . . . . . . . . . . . . . . 9712.2. Variables de fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9912.3. Macros de teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    V Apndices 102

    A. El alfabeto de Vim 103

    B. Un ejemplo de todos los mbitos posibles 105C. Nombres de las teclas en Vim 107

    D. GNU Free Documentation License (Licencia GNU para Documentacin Li-bre) 110

    5

  • Parte I

    Introduccin

    6

  • Sobre esta gua

    La presente gua contiene un resumen de los comandos ms habituales de Vim.Es algo ms amplia que su tutorial, pero no tanto como la totalidad de su docu-mentacin. De hecho su contenido en realidad cubre los dos primeros apartadosde la ayuda de Vim llamados, respectivamente, Iniciacin en Vim y Edicinefectiva. No cubre otras partes como ajuste, funciones especiales para programa-dores, edicin de la lnea de comando, uso del GUI, escritura de scripts, funcionesy expresiones, etc.

    Es decir: se atiende exclusivamente a lo necesario para empezar a escribir do-cumentos y se ampla hasta ciertos aspectos que nos permiten hacernos una idea dela potencia y posibilidades de Vim. Pero no va ms lejos de all.

    La gua surgi cuando me decid a aprender el uso de Vim. La ayuda de Vimes bastante completa pero, por un lado est en ingls, idioma que leo bastante bien,aunque me exige un nivel de concentracin superior al que necesito para leer en milengua natal, y, por otro, tiene un exceso de palabras1. Por lo tanto conforme ibaleyendo el manual fui escribiendo una especie de sntesis de cada uno de los temas,que adems orden segn mi criterio.

    El resultado de todo lo anterior es esta gua del usuario. Ha sido escrita para mmismo, y se basa por lo tanto en la versin de Vim que yo tengo instalada; se tratade la versin 6.3, tal y como este se instala en un Debian Sarge. Hay versiones deVim para otros sistemas operativos y, adems, siendo cdigo abierto, las distintasdistribuciones de Linux pueden introducir pequeas modificaciones o mejoras, oescribir un script de inicializacin ms o menos complejo. Yo no me he ocupadode investigar esos aspectos. Es decir: lo que he escrito se basa en Vim tal y comose instal en mi sistema.

    1Lo que no constituye, por supuesto, una crtica. Al revs: gracias a ese exceso de palabras seentiende todo bastante bien. Lo que ocurre es que el poner muchos ejemplos viene bien slo laprimera vez que se lee algo; despus ya hemos entendido el concepto y slo nos interesa recordarcmo haba que hacerlo; es en esta fase en la que puede hablarse de exceso de palabras.

    7

  • Captulo 1

    Ideas bsicas sobre Vim

    1.1. Qu es VimVim es uno de los editores de texto ms completos que existen. Es extremada-

    mente eficiente y posibilita el mximo rendimiento con el mnimo esfuerzo. Estespecficamente diseado para reducir el nmero de pulsaciones necesarias paraeditar un documento as como el tiempo que se tarda para realizarlas Sus coman-dos de teclado estn pensados teniendo en cuenta incluso la posicin de las teclasen relacin con la mano del mecangrafo (para gente que teclee a la manera orto-doxa, con todos los dedos de la mano). Dispone adems de cientos de funcionesde ayuda para la escritura de un tipo concreto de documentos: programas de orde-nador. Aunque tambin es bueno para la escritura de largos documentos de texto,como puede ser por ejemplo este documento que, en el momento de escribir estalnea, tiene 5287 lneas de puro texto en formato LATEX2.

    Desgraciadamente la potencia y flexibilidad de Vim tiene un precio: su curva deaprendizaje es ms empinada al principio que la de otros editores menos potentes.No tanto porque sean difciles de entender sus conceptos sino porque lleva ciertotiempo acostumbrarse a su peculiar manera de trabajar. Aunque una vez acostum-brados, si somos usuarios habituales de editores de texto y escribimos texto muya menudo, nos preguntaremos cmo pudimos sobrevivir tanto tiempo sin trabajarcon Vim.

    El nombre Vim es una contraccin de Vi IMproved, lo que podramos tradu-cir por Vi mejorado. Es decir: Vim se basa en Vi, el cual es, el ms clsico editorde texto a pantalla completa de Unix. Por ello, aunque en el mundo Unix abundanlos editores de texto, Vi es el nico editor junto con Ed que podemos tener laseguridad de encontrar en cualquier instalacin de Unix (y, por tanto, en cualquierdistribucin de Linux), lo que es otra razn para aprender su funcionamiento. En

    2Esta seccin se ha escrito la ltima. Por eso hay ya tantas lneas en el documento. Al terminarlaaun quedarn las modificaciones y correcciones oportunas. Pero en todo caso el documento finaloscilar en torno a las 5300 lneas de texto.

    8

  • Captulo 1 Ideas bsicas sobre Vim

    Linux todas las distribuciones incluyen Vim, y en varias de ellas este es el editorpor defecto3.

    1.2. Las versiones de Vim

    Como cualquier otra aplicacin para Unix, Vim admite numerosas opciones enla lnea de comandos, y varias de estas opciones hacen que Vim trabaje de ciertamanera; as podemos hacer que Vim se active en el modo de compatibilidad conVi, o en el modo de slo lectura, o en modo grfico, etc.

    Es corriente que para alguna de estas opciones se escriban scripts que seocupen de arrancar Vim con tal opcin activada. Esos scripts funcionan como co-mandos autnomos. As que el resultado final es que Vim puede ser llamado conmuchos comandos. Segn la pgina Man de Vim, los siguientes comandos activan aVim con alguna de sus opciones concretas: vim, ex, view, gvim, gview,evim, eview, rvim, rview, rgvim, rgview. Y adems, al menos en Li-nux, el propio Vi casi nunca se instala, sino que al ejecutarlo se activa Vim conel modo de compatibilidad con Vi, y a veces ni eso: se activa directamente Vim.Adems, con KDE se instala kvim, versin grfica para KDE.

    En la mayor parte de estos casos, ms que de versiones deberamos hablarde modos de arrancar Vim. Posiblemente el nico de estos supuestos en los quepodemos hablar de verdadera versin sea la versin grfica que puede tener distin-tos nombres segn el contexto y nuestra instalacin, los ms normales son gvimy kvim. Esta versin funciona exactamente igual que el Vim estndar, pero dis-pone de algunas posibilidades aadidas y, sobre todo, en ella se pueden hacer lascosas al modo de las aplicaciones grficas, es decir: a golpe de ratn y pulsandobotones o seleccionando opciones de un men.

    Posiblemente a muchos usuarios eso les parezca ms sencillo. Sin embargo siaprendemos as, en realidad nunca sabremos usar el verdadero Vim. Por ello enesta gua se hablar de Vim propiamente dicho ya que el manejo de Vim medianteel teclado es igual en todas sus versiones.

    1.3. Empezar y terminar la ejecucin de VimEl formato del comando vim es el normal en un sistema Unixvim [opciones] [ficheros]

    3No obstante tngase en cuenta que esta gua se refiere a Vim y no a Vi. Tratndose ademsde un resumen, ni siquiera se hace una advertencia respecto de los comandos de Vim que no soncompatibles con Vi. Para ensayar los aspectos mencionados en esta gua hace falta por lo tanto haberarrancado Vim en el modo no compatible con Vi. Para asegurarnos de que estamos en ese modopodemos usar el comando :set nocompatible. Sobre cmo ejecutar este comando vasems adelante en la seccin 2.2.3, pgina 19.

    9

  • Captulo 1 Ideas bsicas sobre Vim

    Donde vim es el nombre del comando (ya hemos visto que podemos llamara Vim con otros nombres), [opciones] se refiere a cualquiera de las admitidas porVim en su lnea de comandos, que estn perfectamente explicadas en la pginaMan de Vim, y deben ir precedidas de un guin, y ficheros se refiere al nombre delos ficheros a editar:

    Si no se indica ningn fichero, Vim empezar con un buffer vaco.

    Si se indica un solo fichero, Vim lo leer y lo cargar en un buffer que serel que muestre su pantalla al iniciarse.

    Si se indican varios ficheros, hay que separarlos por espacios en blanco. Vimasignar un buffer distinto a cada uno de ellos y al empezar mostrar enpantalla el buffer correspondiente al primer fichero. Para navegar entre losbuffers hay que usar el comando :next (Vase la seccin 8.4, pgina 77).

    Si simplemente tecleamos vim normalmente aparecer la versin para con-sola de la aplicacin4 y muy posiblemente nos cause una pobre impresin, puessimplemente veremos una pantalla negra cuyas lnea empiezan salvo la primeray la ltima con un signo de tilde (), en el centro un mensaje de bienvenida yen la ltima lnea posiblemente algunos caracteres. Si intentamos movernos por lapantalla comprobaremos adems que las teclas del cursor no hacen nada, y que elratn tampoco responde.

    Qu ocurre? Que Vim ha empezado en un buffer vaco y en su modo normal.En este modo Vim est esperando la introduccin de algn comando, pero el te-cleado de los comandos normales no se refleja en pantalla. Las flechas del cursorson comandos, pero no hacen nada porque el cursor no se puede mover a ningunaparte ya que el buffer est vaco. Las tildes a la izquierda de las lneas representaneso: que esas lneas en realidad no existen, y el mensaje de ayuda est superpues-to en la pantalla y desaparecer en cuanto realicemos alguna accin real sobre elbuffer (aunque podemos volverlo a traer a la vista con el comando :intro).

    Para empezar a escribir debemos pulsar la tecla i, esto activar el modo deinsercin. Otros comandos tiles en esta primera aproximacin a Vim son :qpara salir de Vim y :help para obtener ayuda. Para introducir estos ltimos co-mandos, si hemos pulsado la tecla i para empezar a escribir, hay primero que pulsarla tecla ESC, luego hay que escribir el comando tal cual, es decir: empezar con elsigno de los dos puntos, y escribir el comando en cuestin. Para indicarle a Vimque ya hemos escrito el comando se pulsa la tecla INTRO.

    El comando para salir de Vim es :q. Pero este comando slo funciona si nohemos cambiado absolutamente nada en el buffer editado. En caso contrario tene-

    4Salvo que en nuestro sistema se haya reescrito el script para arrancar Vim y este llame directa-mente a la versin grfica. En tal caso para arrancar la versin de solo texto habr que usar la opcin-X en la lnea de comandos, o desactivar las X y desde una consola normal llamar a Vim.

    10

  • Captulo 1 Ideas bsicas sobre Vim

    mos que aclarar si queremos terminar Vim grabando los cambios o sin grabarlos.Para ello podemos teclear cualquiera de las siguientes tres cosas:

    :q! Salir de Vim sin guardar los cambios.

    Z! Salir de Vim sin guardar los cambios.

    :wq Guardar los cambios y terminar.

    ZZ Guardar los cambios y terminar.

    Se ver que los dos primeros hacen lo mismo, y los dos ltimos tambin. Setrata pues de dos comandos que tienen cada uno de ellos dos versiones, una fun-ciona como comando de lnea de comandos y la otra como comando de efectoinmediato. Vase ms adelante la distincin entre ambos tipos de comandos. Paralo que ahora interesa los comandos que empiezan por : no se ejecutan hasta quese pulsa INTRO. Los otros se ejecutan inmediatamente.

    De momento vamos a teclear :q! y si al escribirlo vemos que se escribe enun lugar distinto de la ltima lnea, pulsamos ESC y volvemos a escribirlo. Enseguida se explicar lo que eso significa.

    1.4. Obtencin de ayuda

    La ayuda de Vim es muy extensa y detallada, aunque desgraciadamente est eningls. En espaol podemos encontrar un tutorial con los comandos ms bsicosque se inicia ejecutando desde nuestra shell el comando vimtutor seguido de lasiniciales del idioma deseado. Si escribimos slo vimtutor se abrir el tutorial enel idioma por defecto de nuestro sistema.

    Adems del tutorial, el comando :help (que tambin se activa pulsando F1)muestra la pantalla general de ayuda, con enlaces a las distintas posibilidades deayuda. Esa pantalla general en realidad es un documento normal de Vim, en elque nos debemos mover de la misma manera que en cualquier otro documento. Laayuda se muestra en una ventana independiente. Para salir de ella debemos usar losmtodos normales (ZZ, :q, etc).

    Dentro de la pantalla de ayuda el texto encerrado entre barras verticales repre-senta enlaces. Colocando el cursor sobre dicho texto y pulsando CTRL-] saltare-mos al enlace en cuestin. Para volver a nuestro punto de origen podemos pulsarCTRL-T CTRL-O.

    El formato general del comando help es el siguiente::help [argumento]

    Donde argumento puede ser:

    11

  • Captulo 1 Ideas bsicas sobre Vim

    Un comando: Se mostrar ayuda sobre dicho comando. Por ejemplo :helpx muestra la ayuda sobre el comando x. Si queremos obtener una lista detodos los comandos de Vim debemos ejecutar :help index.Una combinacin de teclas: Muestra la ayuda sobre tal combinacin. Porejemplo: :help CTRL-A. Si esa combinacin de teclas no funciona igualen todos los modos en los que funciona, para precisar que queremos ayudasobre dicha combinacin en un modo concreto hay que aadir a la combi-nacin de teclas los prefijos i_, v_ o c_, segn deseemos saber cmofunciona dicha combinacin en los modos de insercin, visual o de edicinde lnea de comandos5. Si no precisamos ningn prefijo se ofrecer la ayu-da sobre el modo normal. As :help i_CTRL-H muestra la ayuda sobreel funcionamiento de la combinacin de teclas CTRL-H en el modo de in-sercin. Para pedir ayuda sobre teclado, las teclas especiales se identificanpor su nombre en ingls entre signos . Por ejemplo :help nos daayuda sobre el uso de la tecla flecha arriba, y :help i_ nos da ayudasobre el uso de la misma tecla en el modo de insercin. Vase el apndice C,pgina 107 sobre el nombre en Vim de las teclas.

    Una tarea: Si conseguimos acertar con el nombre en ingls de una tareaidentificable obtendremos ayuda sobre como realizarla en Vim. Por ejemplo:help deleting o :help searching nos indicar como borrar o cmobuscar.

    Una opcin de la lnea de comandos. Porque Vim, como cualquier aplicacinpara Unix, admite numerosas opciones en lnea de comandos. Si queremosobtener ayuda detallada de ellas (ms detallada que la existente en la pginaman de Vim) este es el procedimiento. Por ejemplo :help -t nos mostrarayuda sobre la opcin t.

    Una opcin interna de Vim. En Vim las opciones se establecen medianteel comando :set seguido del nombre de la opcin. Por ejemplo :setruler activa el indicador de posicin en la lnea inferior. :help 'ruler'nos ofrecera la ayuda sobre esta opcin. Para ver una lista de todas estas op-ciones ejecute :help option-summary. En ocasiones el nombre de unade estas opciones puede tener varios significados para Vim. Por ejemplonumber. Para asegurarnos de que se nos muestre la ayuda correcta, hayque encerrar el nombre de la opcin entre apstrofes.

    Un nmero de error: En ocasiones al ejecutar ciertos comandos Vim devuel-ve un mensaje de error que empieza siempre por la letra E seguida del n-mero de error. As :help E37 nos informar sobre el significado del error37.

    5En el caso de los comandos que funcionan de modo especial en el modo visual de bloques, parapedir ayuda sobre ellos hay que usar el prefijo v_b_.

    12

  • Captulo 2

    Las nociones fundamentales deVim

    2.1. Modos de Vim

    Los editores de texto reciben las instrucciones del usuario bsicamente a travsdel teclado. Por esta va el usuario puede intentar insertar texto en su documento, osolicitar del programa que realice cierta accin o comando. Los distintos editoresde texto utilizan diferentes procedimientos para poder distinguir ambos casos, esdecir, para poder interpretar adecuadamente lo que el usuario vaya tecleando. Lostres procedimientos fundamentales para ello son el men, las teclas de cambio ylos modos. El men significa que, en primer lugar, los comandos se asocian a op-ciones de un men y, en segundo lugar, se asigna una tecla a la activacin del men(normalmente F10), de tal modo que tras la pulsacin de esa tecla lo que el usuarioteclee se interpretar como una seleccin del men. Las teclas de cambio queconstituyen el mtodo favorito de un editor tan potente como Emacs suponenque los comandos se asocian a pulsaciones que impliquen alguna tecla especial:normalmente las teclas CTRL y Alt. El sistema de los modos es el usado por Vimque por ello se denomina editor modal, significa que el editor puede estar en dife-rentes modos y segn en qu modo se encuentre as se interpretar lo que el usuarioteclee6.

    En Vim hay varios modos distintos. Pero de ellos hay dos que son los verda-deramente fundamentales y que no tienen equivalente en otros editores. Los otrosmodos son secundarios, y sus funcionalidades se podran explicar de otra manera.

    6Como ejemplo de editor basado en mens podra citarse casi todos los editores para KDE oGNOME como Kate, Kwrite, etc. En cuanto a Emacs y Vim no constituyen modelos totalmentepuros. En Emacs hay un men y hay tambin un modo de comando, aun as lo normal en l es actuarmediante teclas de cambio. En Vim tambin puede haber un men, y tambin se hace cierto uso delas teclas de cambio; pero lo esencial en l son los distintos modos.

    13

  • Captulo 2 Las nociones fundamentales de Vim

    2.1.1. Los modos fundamentales

    Estos son los llamados modos normal y de insercin. El modo normal es aquelen el que Vim se encuentra recin arrancado y en el que se supone que debemosdejarlo cuando no estemos haciendo otra cosa (por eso se llama normal). En lcualquier pulsacin de teclas que realicemos se interpretar como comando. Por elcontrario en el modo de insercin Vim se comporta como cualquier otro editor detexto, es decir: lo que vayamos tecleando se ir mostrando en pantalla en el lugardonde estaba el cursor, siendo interpretado como texto que hay que introducir enel documento que estamos editando.

    Debemos fijarnos en que Vim llama modo normal a aquel en el que menos separece a otros editores de texto. Tal vez por ello a veces a este modo se le llamamodo de comando, aunque el nombre de modo normal es bastante indicativo dela filosofa de Vim. La idea es que siempre que no estemos haciendo otra cosaactivemos el modo normal: mientras revisamos el texto escrito, mientras reflexio-namos sobre qu aadir, mientras contestamos al telfono, si hacemos una pausapara sorber una taza de caf. . . se supone que habremos activado el modo normal.

    2.1.2. Otros modos

    Adems de los modos normal y de insercin, en Vim existen los modos de lneade comandos, visual, de seleccin y de reemplazo.

    En el modo de lnea de comandos podemos escribir el nombre completo deun comando con sus argumentos y ejecutarlo al pulsar la tecla INTRO. No se sueleconsiderar un modo distinto del modo normal. Vase ms adelante cuando hable-mos de comandos.

    En el modo visual conforme movemos el cursor el texto se va sealando visual-mente de modo similar a lo que ocurre en otras aplicaciones cuando se seleccionatexto. De hecho este modo es el equivalente a la seleccin de texto en esas otrasaplicaciones, ya que una vez que se ha marcado una porcin de texto, el comandoque a continuacin se ejecute afectar exclusivamente a dicha porcin.

    El modo de seleccin, es muy parecido al modo visual y normalmente se iden-tifica con l.

    El modo de reemplazo equivale a lo que en otras aplicaciones se llama sobre-escritura es decir: lo que vayamos escribiendo en lugar de insertarse en el docu-mento, va sustituyendo a su contenido previo.

    2.1.3. Teclas para cambiar entre los modos

    Estas son las primeras teclas que hay que aprender; por lo menos las que activanlos modos normal y de insercin, porque son fundamentales. En ellas hay que tener

    14

  • Captulo 2 Las nociones fundamentales de Vim

    en cuenta que Vim, al igual que casi todas las aplicaciones nacidas para el mundoUnix, distingue entre maysculas y minsculas:

    ESC Activa el modo normal. Tambin sirve para anular la introduccin de uncomando y, en general, para interrumpir una accin que se est ejecutando.

    i Activa el modo de insercin.

    : Si consideramos que el modo de lnea de comandos es distinto del modo normal,este carcter lo activara.

    v, V Activan el modo visual.

    gh, gH Activan el modo de seleccin.

    R Activa el modo de reemplazo.

    INS Desde los modos normal y de reemplazo activa el modo de insercin; desde este,activa el modo de reemplazo.

    La tecla ESC funciona en cualquier modo que estemos, aunque si ya estamosen el modo normal es posible que el sistema emita un pitido. La tecla INS tambin,pero, como es lgico, las teclas :, i, v, gh y R slo sirven para activarmodos si estamos en el modo normal. Pulsar i, por ejemplo, desde los modosde insercin o de reemplazo, escribe una i en el documento, y hacerlo desde elmodo visual no produce ningn efecto.

    Por otra parte la tecla i es la normal para activar el modo de insercin; perono la nica. Hay otras teclas que lo activan, y la diferencia est en dnde se colocael cursor en cada caso, es decir: donde empezaremos a escribir:

    i El cursor se deja donde estaba.I El cursor se lleva al principio de la lnea actual.

    a El cursor se desplaza un carcter a la derecha.

    A El cursor se desplaza hasta el final de la lnea actual.

    o Se inserta una lnea en blanco, bajo la actual, y el cursor es llevado al princi-pio de la misma.

    O Se inserta una lnea en blanco por encima de la actual y el cursor es llevadoal principio de la misma

    Adems de estos comandos, los comandos c, C, s y S activan el modode insercin, pero de ellos se hablar a propsito de los comandos para la manipu-lacin del texto (en la seccin 4.1, pgina 43.).

    15

  • Captulo 2 Las nociones fundamentales de Vim

    2.1.4. Saber en qu modo estamos

    Una de las cosas ms molestas cuando se empieza a trabajar con Vim es equivo-carse de modo: empezar a escribir algo creyendo que estamos en un modo cuandoen realidad estbamos en otro modo distinto. Por ello es conveniente una mane-ra de saber en qu modo estamos, y para ello Vim facilita la opcin showmodemediante la que podemos activar la informacin sobre el modo, es decir: que en laltima lnea de la pantalla se nos diga en qu modo estamos.

    En la mayora de las instalaciones de Vim showmode viene activado por defec-to. Si no fuera as, para activarlo basta con, en el modo normal, ejecutar el siguientecomando::set showmode

    y si lo que queremos es desactivar esta opcin lo que hay que escribir es:set nowhowmode

    De todas formas tngase en cuenta que showmode nos informa del modoslo cuando este modo no sea el modo normal7. Es decir: si activado showmodevemos en la esquina inferior izquierda el nombre de un modo, ese es el modo en elque estamos. Si no vemos nada, significa que estamos en el modo normal.

    2.2. Comandos de Vim

    En el modo normal las pulsaciones de teclado son interpretadas como coman-dos8. Cualquier cosa que queramos hacer en Vim y que no sea exactamente intro-ducir texto es un comando. De hecho incluso la introduccin de texto es en realidadconsecuencia de alguno de los comandos que activan el modo de insercin.

    Podemos distinguir dos tipos bsicos de comandos. Los de ejecucin inmediatay los de lnea de comandos o ejecucin diferida. Los primeros, por otra parte, sedistribuyen en dos grupos: los comandos con mbito y los comandos sin mbito.

    2.2.1. Comandos de ejecucin inmediataSe dice que un comando es de ejecucin inmediata cuando basta con teclearlo

    para que se ejecute. Los comandos asociados a las acciones ms corrientes en laedicin son de este tipo como: mover el cursor, copiar texto, borrarlo, insertarlodesde memoria, etc.

    Estos comandos, por otra parte, pueden constar de un solo carcter o de msde uno. En el primer caso se ejecutan en cuanto el carcter ha sido pulsado. En

    7Si consideramos al modo de lnea de comandos como distinto del modo normal, showmodetampoco nos informa de l, pero ello posiblemente sea porque en este modo la zona usada por show-mode para informar del modo, est ocupada por la propia lnea de comandos.

    8Para cada una de las teclas del alfabeto hay asociado un comando distinto. Se distingue ademsentre las letras en minsculas y en maysculas. Vase el apndice A, pgina 103

    16

  • Captulo 2 Las nociones fundamentales de Vim

    el segundo caso no se ejecutan hasta que se ha terminado de pulsar, pero durantesu pulsacin las teclas que vayamos escribiendo no se reflejan en la pantalla. Porejemplo, si yo quisiera ejecutar el comando 35dB y estoy en el modo normal,tras escribir el primer 3 no ver nada en pantalla que indique que he iniciado lasecuencia de teclado necesaria para ejecutar un comando. Esto tiene el inconve-niente de que si algo nos distrae mientras estamos tecleando el comando, podemosolvidar qu parte hemos tecleado ya. Lo mejor en estos casos es pulsar ESC paracancelar la introduccin del comando.

    Aunque tambin podemos establecer la variable showcmd mediante el co-mando :set showcmd cuyo efecto es el de hacer eco de los comandos conformese van tecleando en la lnea inferior de la pantalla. Para desactivar de nuevo estaopcin basta con ejecutar el comando :set noshowcmd.

    De todas maneras la mayora de estos comandos constan de un solo carcter, yalgunos constan de dos caracteres. Ello sin contar, claro es, los posibles argumentos(numrico y de mbito) que pueden hacer que un comando completo llegue a tenerhasta seis caracteres, si bien eso no es corriente.

    Otra cosa distinta es que en los manuales de Vim, y en los foros de Internet, losusuarios de la aplicacin tienen la costumbre de transcribir juntas todas las letrasque hay que pulsar para realizar varios comandos. Por ejemplo: si yo digo quehay que pulsar gg!12Gsort en una misma expresin estoy transcribiendo variasacciones diferentes, pero al expresarme as es posible que asuste a alguien respectode la facilidad de uso de Vim.

    En cuanto a la distincin entre comandos con mbito y comandos sin mbito,vase la seccin 2.3, pgina 21.

    2.2.2. Comandos de lnea de comandos

    Junto con los comandos de ejecucin inmediata, existe un segundo grupo decomandos llamados de lnea de comandos, su peculiaridad es que estos coman-dos no estn representados por una o varias teclas, sino que tienen un nombrepropiamente dicho y para ejecutarlos hay que escribir su nombre.

    Antes de introducir uno de estos comandos, hay que advertir a Vim que quere-mos escribir el nombre de un comando, para que conforme vayamos tecleando elnombre no interprete nuestras pulsaciones como comandos de ejecucin inmedia-ta. El comando para advertir a Vim que queremos ejecutar un comando escribiendosu nombre es el comando dos puntos (:).

    Desde un punto de vista estricto, ms que de comandos de lnea de comandos debe-ra hablarse de un modo especial, distinto del modo normal; en cuyo caso la tecla delos dos puntos sera la que activara este modo de la misma manera que la i activael modo de insercin y pulsando ESC se vuelve al modo normal.Qu diferencia hay entre hablar de comandos especiales o hablar de un modo es-pecial. La verdad es que no demasiada; pero alguna hay. Por ejemplo hay ciertas

    17

  • Captulo 2 Las nociones fundamentales de Vim

    combinaciones de teclas que funcionan slo cuando se est en la lnea de coman-dos, o que en ella funcionan de manera distinta. Para pedir ayuda sobre el teclado enla lnea de comandos hay que usar un prefijo c_ de la misma manera que hay queusarlo para pedir ayuda sobre el teclado en cualquier otro modo distinto del normal.En suma: si llamamos modo a una manera especial de funcionar que habilita ciertoscomandos y que hace que Vim interprete de cierta manera lo que se teclea, que seinicia cuando en el modo normal se pulsa cierta tecla y que se termina cuando sepulsa ESC, no hay duda de que la pulsacin de los dos puntos activa un verdaderomodo.En esta gua, sin embargo, hablar de comandos de lnea de comandos porque me esms sencillo hablar genricamente de comandos y sealar que algunos empiezan porel carcter de los dos puntos. Y como, por otra parte, no se dedica ningn captuloa la edicin en la lnea de comandos (esa es de las partes no tratadas en esta Gua),puedo hacerlo as tranquilamente.

    Cuando en el modo normal pulsamos : el cursor se traslada a la ltima lneade la pantalla, escribe los dos puntos y espera a que escribamos el nombre delcomando, el cual no ser ejecutado hasta que le indiquemos a Vim que hemosterminado de escribir el nombre del comando con todos sus argumentos, cosa quese hace pulsando INTRO.

    Debido a que estos comandos se introducen siempre empezando por el coman-do :, muchas veces se considera que los dos puntos forman parte del nombredel comando. Y de hecho as lo har yo en este manual, ya que esa es una formacmoda de indicar la naturaleza de un comando. Y as si digo que hay que pulsardaw significa que se trata de un comando instantneo. Pero si digo que hay quepulsar :nohlsearch significa que el comando es de lnea de comandos y que porlo tanto no se ejecutar hasta que pulsemos INTRO.

    Sigue Vim algn criterio para hacer que ciertos comandos sean instantneosy otros no? La verdad es que s lo sigue y en general los comandos de lnea decomandos lo son por alguno de los siguientes tres motivos.

    1. Porque son comandos demasiado poco habituales como para que merezca lapena tener asociados a ellos de modo permanente una tecla. A fin de cuentaslas teclas a las que asociar comandos son pocas, y hay que pensar muy bien aqu comandos asociarlas. De hecho por defecto todas las teclas del alfabetoestn asociadas a alguna accin. Vase al respecto la seccin A, pgina 103.

    2. Porque son comandos que requieren argumentos complejos; o ms comple-jos que un simple argumento numrico y un mbito de actuacin, que sonlos nicos argumentos que admiten los comandos de ejecucin inmediata.

    3. Porque son comandos que es peligroso que se puedan ejecutar por error.

    Como aclaracin de esta ltima afirmacin dir que en principio cualquier ac-cin que realicemos sobre el texto puede ser deshecha mediante el comando des-hacer (u) por lo que a Vim no le importa que algunos comandos drsticos, como

    18

  • Captulo 2 Las nociones fundamentales de Vim

    borrar, puedan ser ejecutados por error (tal vez por no darnos cuenta de que estba-mos en el modo de comando), ya que si eso ocurriera podramos deshacer lo malhecho simplemente pulsando el comando u (deshacer).

    Pero hay comandos cuyo efecto no se puede deshacer como por ejemplo gra-bar en disco los cambios hechos en el documento, o salir de Vim. Por eso estoscomandos, aunque sean de uso muy habitual, son comandos de lnea de comandos.Porque para ejecutarlos hay que empezar por escribir :, luego el nombre del co-mando y finalmente la tecla INTRO. Como, adems, mientras se escribe el nombredel comando lo escrito se refleja en la ltima lnea de la pantalla, es muy difcil queel comando llegue a ejecutarse por error.

    2.2.3. Otras cuestiones relacionadas con los comandos

    Respecto de los comandos normales o de efecto instantneo, tngase ademsen cuenta que:

    Prefijo numrico en los comandos: La mayora de los comandos de Vim admi-ten un prefijo numrico que se interpreta como nmero de veces que hay queejecutar el comando. Para introducir ese prefijo basta con escribirlo antesque el comando (por eso se llama prefijo). Y as, por ejemplo, si el coman-do daw borra toda una palabra, 2daw borrar dos palabras, y 200dawborrar doscientas palabras.

    Duplicacin de comando: Un porcentaje muy alto de los comandos de Vim tie-nen la peculiaridad de que si son duplicados hacen que el mbito del co-mando sea toda la lnea sobre la que se encuentra el cursor. Por ejemplo: elcomando general para borrar es d, por lo tanto dd borra toda la lnea;el comando general para copiar texto es y, por lo tanto yy copia toda lalnea, etc. No obstante esta regla no funciona con todos los comandos y nosiempre un comando duplicado acta sobre la lnea.

    Y en cuanto a los comandos de lnea de comandos, es de inters saber que:

    Abreviaturas Todos los comandos poseen una abreviatura de una o dos letras,a veces incluso hay dos abreviaturas, siendo indistinto el que el comandosea llamado por el nombre completo o por la abreviatura. En esta gua aveces se pone la abreviatura y a veces no. Para conocer todos los nombresposibles de un comando lo mejor es pedir ayuda sobre l mediante :helpNombreComando.

    El comando :set y las opciones de Vim: De entre los comandos de lnea decomandos hay uno especialmente importante. Se trata del comando :set.Este comando se usa para fijar las distintas opciones de Vim.

    19

  • Captulo 2 Las nociones fundamentales de Vim

    Existen ciertas opciones que afectan al modo en que Vim se comportar. Es-tas se activan y desactivan mediante el comando :set seguido del nombrede la opcin de que se trate. Por ejemplo :set showmode que, como yahemos visto, sirve para activar la utilidad consistente en informarnos de enqu modo estamos.Pues bien: todo el funcionamiento de Vim depende de estas opciones, que seactivan con el comando :set. En consecuencia cuando a partir de ahorase hable de activar cierta opcin, hay que sobreentender que ello se hacemediante el comando :set.Por otra parte :set ofrece dos usos peculiares. Si escribimos setNombreOpcin& se nos informar del valor por defecto de esa opcin; ysi escribimos :set NombreOpcin? se nos informar del valor actual de lamisma.Estas opciones son de varios tipos. Algunas admiten valores numricos, otrasalfabticos y otras son booleanas, es decir: estn activadas o desactivadas.En este ltimo caso Vim suele establecer dos opciones, una para activar, yotra con el mismo nombre precedido de no para desactivar. Por ejemplo:showmode y noshowmode. En general en esta gua cuando se habla deactivar una opcin, se hace referencia a estas ltimas, que se activan simple-mente escribiendo :set seguido del nombre de la opcin a activar.

    El comando :options: Para ver una lista de todas las opciones disponibles,agrupadas por materias, de tal manera que podamos modificarlas con fa-cilidad, hay que ejecutar el comando :options. Tras ello se abrir unaventana en la que podremos navegar por las distintas opciones y alterar suvalor. Tngase en cuenta que esos cambios slo durarn hasta que se cierre lasesin con Vim. Cuando el programa se reinicie todo volver a su valor pordefecto. Para conseguir que la asignacin de cierto valor a una opcin con-creta sea persistente, hay que hacerlo en un fichero de configuracin. Vasela seccin 12.1, pgina 97.

    El historial de comandos: Vim mantiene en un buffer de memoria independien-te qu comandos de lnea de comandos han sido ejecutados desde que seinicio la sesin. Podemos navegar por ese historial de modo que podamosvolver a ejecutar un comando sin necesidad de volver a escribirlo, o volverloa ejecutar con ligeras modificaciones escribiendo slo las modificaciones.Para acceder al historial de comandos hay que, en primer lugar, ejecutar elcomando : de tal modo que el cursor salte a la ltima lnea. Ya sabemosque Vim estar esperando que escribamos el nombre de un comando; si enlugar de ello pulsamos la tecla de flecha hacia arriba, se mostrar el ltimocomando ejecutado. A partir de ah con las flechas arriba y abajo podremosnavegar por el historial de comandos. Estando en un comando concreto po-dremos editarlo y modificarlo.

    20

  • Captulo 2 Las nociones fundamentales de Vim

    Tambin es posible saltar directamente a cierto comando. Para ello antesde pulsar la flecha arriba por primera vez hay que escribir el principio delnombre del comando y luego pulsar la flecha arriba: se mostrar la primeraentrada del historial que coincida con el comando que se empez a escribir.Por ejemplo: si deseo reejecutar el comando :set hlsearch que ejecuthace tiempo, pulsando :s y luego la flecha arriba conseguir que se mues-tre no el ltimo comando ejecutado, sino el ltimo cuyo nombre empezabapor s.Si queremos ver todo el historial de comandos hay que ejecutar el comando:history. Este mismo comando seguido de / nos mostrar el historialde bsquedas.

    La funcin de autocompletado de la lnea de comandos Vim dispone de unafuncin de autocompletado sensible al contexto. Cuando estamos teclean-do un comando o un nombre de fichero, o el nombre de una opcin, una vezescrita la primera o primeras letras, la tecla TAB completar el nombre alprimer comando, fichero u opcin cuyo nombre coincida. Pulsando sucesi-vas veces la tecla TAB ira cambindose el nombre que se nos ofrece. Si loque queremos es ver cuantas posibilidades hay, debemos pulsar CTRL-D.

    2.3. Indicacin del mbito en los comandos

    Entre los comandos de ejecucin inmediata se distingue segn sean comandoscon mbito o sin mbito. La ayuda de Vim llama a los primeros operadores. Uncomando sin mbito es el comando que se ejecuta inmediatamente. Por ejemplo:mover el cursor, o insertar texto desde memoria, o activar el modo de insercin...Pero hay comandos que lo que hacen lo pueden hacer sobre objetos distintos, yen este caso adems de teclear el nombre del comando hay que indicar sobre quobjeto queremos que el comando se ejecute. Por ejemplo: borrar. Podemos quererborrar un carcter, una palabra, una lnea, una frase, un prrafo... Una vez quehemos introducido el comando borrar (que es la letra d de delete), este no seejecutar inmediatamente, sino que esperar hasta que escribamos los caracteresrepresentativos del mbito u objeto al que hay que aplica el comando. As, porejemplo, podemos borrar toda una lnea dd, una palabra dW el prrafo enterodap, etc.

    El mbito de actuacin de un comando con mbito puede fijarse de cuatromaneras:

    1. Mediante una operacin de movimiento del cursor: El comando se aplicar altexto comprendido entre la posicin actual del cursor y la posicin alcanzadapor el cursor tras su movimiento.

    2. Mediante un objeto de texto al que el comando debe aplicarse (vase la sec-cin 2.3.1, pgina 22).

    21

  • Captulo 2 Las nociones fundamentales de Vim

    3. Indicado manualmente mediante la activacin del modo visual: El comandose aplicar a la porcin de texto que hayamos seleccionado manualmente(vase la seccin 2.3.2, pgina 24).

    4. Indicado manualmente mediante el establecimiento de un rango en lnea decomandos (vase la seccin 2.3.3, pgina 26).

    En los dos primeros casos el mbito se especifica despus del comando, en losltimos el mbito se especifica antes que el comando.

    En todo caso queda claro que esta caracterstica de Vim, combinada con la am-plitud de comandos para mover el cursor y de objetos de texto reconocidos, es unade las claves de la potencia y elegancia de Vim. Mediante un simple movimien-to del cursor podemos formatear TODO nuestro documento, por grande que sea.Por ejemplo, estando en modo normal, la secuencia de teclado gggqG tendr elsiguiente efecto:

    gg: Llevar el cursor al principio del documento.

    gq: Activar el comando de reajustar los saltos de lnea.G: Llevar el cursor al final del documento, reajustando los saltos de lnea.

    Cinco pulsaciones de teclado han bastado para reajustar los saltos de lnea detodo nuestro documento.

    Ms adelante se hablar de los comandos de movimiento del cursor. Ahora nosreferiremos al resto de los procedimientos para indicar un mbito de actuacin:

    2.3.1. Objetos de textoVim reconoce ciertos objetos de texto estndar: palabras, frases, prrafos y blo-

    ques. Para ello lo que hace es usar delimitadores, es decir: de todos los caracteresposibles en un texto, Vim sabe que, por ejemplo, una palabra es una porcin de tex-to compuesta por letras encerrada entre caracteres que no son letras; las no-letrasactan como delimitadores de las palabras. Un prrafo se considera que est de-limitado por una lnea en blanco, un bloque es el texto encerrado entre llaves oparntesis, etc.

    Para cada objeto se usa una letra identificativa del mismo. As:

    w Para palabras, es decir: letras delimitadas por no letras (w = words).s Para frases, es decir: palabras delimitadas por puntos (s = sentences).p Para prrafos: lneas con texto delimitadas por lneas totalmente en blanco

    (p = paragraph).

    22

  • Captulo 2 Las nociones fundamentales de Vim

    b Para parntesis: texto encerrado entre parntesis (b = blocks).B Para llaves: Texto encerrado entre llaves.

    A cada objeto, adems, nos podemos referir incluyendo los delimitadores oexcluyndolos. En el primer caso usaremos una a antes del objeto, y as awsignifica una palabra desde su principio hasta el carcter inmediatamente anterior ala prxima palabra. Para indicar solo el objeto, excluidos los delimitadores, se usala i, y as iw significa una palabra, pero solo ella, sin los espacios en blancoque la rodeen. La letra a es el artculo indefinido ingls, y la letra i es la inicialde inner, por lo tanto ap se traduce por un prrafo, ip por dentro de unprrafo o el contenido de un prrafo.

    Ahora bien: lo que acabo de explicar no es exactamente as salvo en el caso delos parntesis y las llaves. Ah est claro que la diferencia entre ab e ib esten incluir o no a los delimitadores. En los dems casos a incluye slo a algunosdelimitadores:

    En las palabras slo se incluyen los espacios en blanco posteriores a la pala-bra, pero no otros delimitadores como pueden ser los signos de puntuacin.

    En los prrafos y frases se incluyen todos los delimitadores posteriores, perono los anteriores.

    Teniendo pues claro lo que significan a e i, resulta que los objetos de textoposibles son los siguientes diez objetos:

    aw: Una palabra con delimitadores.

    iw: Una palabra sin delimitadores.

    as: Una frase con delimitadores.

    is: Una frase sin delimitadores.

    ap: Un prrafo con delimitadores.

    ip: Un prrafo sin delimitadores.

    ab: Unos parntesis con todo el texto que contienen.

    ib: El texto encerrado entre parntesis.

    aB: Unas llaves con todo el texto encerrado entre ellas.

    iB: El texto encerrado entre llaves, pero sin las llaves.

    23

  • Captulo 2 Las nociones fundamentales de Vim

    En consecuencia tras teclear cualquiera de los comandos con mbito podremosescribir el nombre de uno de estos objetos para que el comando se le aplique. Yas, si el comando d es el de borrar, daw borrar una palabra con su espacioen blanco, mientras que diB borrar el contenido de los parntesis dentro de loscuales est el cursor, pero dejando los parntesis propiamente dichos.

    Asimismo se puede usar un prefijo numrico para el objeto de texto, y asd4ap borrar cuatro prrafos completos, empezando por aquel donde se encuen-tre el cursor.

    2.3.2. Seleccionar texto en Vim: El modo visual

    Otra forma de delimitar el mbito de actuacin de un comando es seleccionarmanualmente una porcin de texto a la que se aplicar el comando. Esto se hacemediante el modo llamado visual que equivale a lo que otras aplicaciones detratamiento de textos llaman seleccin o activacin de bloques: La idea es irmoviendo manualmente el cursor de tal manera que el texto vaya quedando marca-do, y esa marca sea visualmente reconocible: el prximo comando que se ejecuteafectar slo al texto marcado.

    Ms adelante veremos los completos comandos de movimiento del cursor conque Vim cuenta. En la filosofa de Vim se encuentra el que slo hay que usar el mo-do visual cuando queramos referirnos a una porcin de texto que no se correspondacon ninguna de las unidades conocidas por Vim. Por ejemplo, si queremos borrarparte de una palabra y parte de la siguiente, o si en una tabla queremos borrar unacolumna entera.

    En Vim el modo visual se puede activar mediante las teclas v, V y CTRL-V. La diferencia est en que activando el modo visual con V la seleccin se harsiempre por lneas completas, y usando CTRL-V se activar la seleccin por blo-ques, es decir: la seleccin ir formando una especie de recuadro, lo que es extre-madamente til cuando se trabaja con tablas y se quiere dar una orden que afecte atoda una columna.

    Cuando estamos trabajando en el modo visual, la seleccin va siguiendo alcursor por el extremo en el que iniciamos el movimiento. Podemos usar cualquierade los comandos de movimiento del cursor, aunque debe tenerse en cuenta que siel modo visual se inici pulsando CTRL-V, el comando $ (fin de lnea), tieneun comportamiento especial, porque el efecto de su ejecucin es el de extender laseleccin en todas las lneas hasta su extremo, incluso aunque la lnea en la queest el cursor sea ms corta; y la seleccin se mantendr hasta el final de todas laslneas hasta que realicemos algn movimiento horizontal del cursor (a derecha oizquierda); en este momento el bloque de texto volver a ajustarse con respecto ala anchura de la lnea en la que se puls $.

    Cuando vamos seleccionando, un extremo de la seleccin se corresponde conel lugar donde estaba el cursor cuando se inici el modo visual, y el otro extremo

    24

  • Captulo 2 Las nociones fundamentales de Vim

    se corresponde con el lugar en el que est ahora el cursor. Si en algn momentoqueremos extender la seleccin por el extremo opuesto a aquel en donde ahora estel cursor, el comando o intercambiar los dos extremos, es decir: el cursor pasara situarse en el lugar en donde se inici la seleccin, dejando el inicio de la mismaen el punto donde estaba el cursor al ejecutar el comando.

    Si la seleccin es por bloques (CTRL-V), junto con el comando o se habilitael comando O. El primero funciona como se acaba de explicar, lo que en un re-cuadro significa llevar el cursor al vrtice opuesto a aquel en el que est; el segundolleva el cursor al vrtice complementario de la seleccin. Es decir: si representa-mos el texto seleccionado como un recuadro, tal y como se muestra en el siguientediagrama en el que he sealado los vrtices del recuadro con las letras A, B, C y D:

    Diagrama1.jpg

    el comando o mover el cursor a lo largo de las lneas AD y CB, mien-tras que O lo mover por AB y por CD, dependiendo en cada caso dedonde est el cursor cuando el comando sea ejecutado. Y as, por ejemplo, estandoel cursor en A, o lo llevar a D, pero O lo llevar a B.

    En suma: la combinacin de o y O permite llevar el cursor a cualquiera delos cuatro vrtices.

    El modo visual se mantendr hasta que:

    1. Se pulse la tecla ESC.

    2. Se pulse la tecla con la que se inici el modo visual9.

    3. Se ejecute algn comando que afecte al texto seleccionado.Este comando puede ser un comando normal, o un comando especfico para el

    modo visual. Vase la seccin 7.1, pgina 63. Si tras la ejecucin del comando pul-samos gv volver a seleccionarse automticamente el mismo texto (suponiendoque aun exista).

    En fin: estando activo el modo visual automticamente se inserta la marca en el lugar donde esta acaba.Esas marcas se pueden usar para la indicacin manual de rangos (Vase el prximoepgrafe y en el prximo captulo lo relativo a las marcas).

    9Es decir: v, V o CTRL-V. Si habindose iniciado el modo visual con una de ellas se pulsaotra de ellas, el modo visual se mantendr, pero se activar el tipo de modo visual correspondiente ala tecla que se acabe de pulsar. As, si iniciamos el modo visual con una v y tras seleccionar unaslneas pulsamos CTRL-V la seleccin cambiar a seleccin por bloques.

    25

  • Captulo 2 Las nociones fundamentales de Vim

    2.3.3. Indicacin manual de rangos

    En Vim un rango es una seleccin de lneas indicada manualmente. Algunoscomandos admiten este procedimiento para determinar su mbito de actuacin.

    El formato para indicar un rango es sencillo: se indica el nmero de la primeralnea afectada y el nmero de la ltima lnea, separando ambos nmeros por unacoma (,); aunque tambin puede indicarse slo una lnea, si no se quiere que elcomando afecte a ninguna otra.

    A las lneas podemos referirnos por su valor absoluto, empezando por 1 (pri-mera lnea del documento), pero tambin podemos referirnos a algunas lneas con-cretas mediante ciertos smbolos que las representan. Concretamente:

    % (tanto por ciento) Representa todas las lneas del documento. $ (dlar) Representa la ltima lnea del documento. . (punto) Representa la lnea en la que actualmente est el cursor.

    Aunque una de las caractersticas ms poderosas de la indicacin de rangoses que en ellos podemos referirnos a las dos lneas delimitadoras mediante lossiguientes procedimientos:

    Una expresin regular. En realidad dos expresiones regulares: una para laprimera lnea del rango y otra para la segunda.

    Marcas manuales, que se explican en la seccin 3.3.2, pgina 39. Las marcasse identifican por la letra que se les asoci en el momento de su creacin,precedida de un apstrofe. As, por ejemplo, la expresin :'t,'b se refierea un rango entre la lnea donde se encuentra la marca t y aquella en la quese encuentra la marca b. Entre las marcas utilizables estn las predefinidaspor Vim, incluidas las que acabamos de ver que se insertan en el modo visual.As por ejemplo el rango :'>,$ se refiere a todas las lneas desde el fin dela seleccin hasta el final del fichero.

    Un nmero concreto de lneas: La indicacin de la lnea final puede hacersemediante una operacin aritmtica simple. Por ejemplo una suma a partir dela lnea inicial. Eso no tiene mucho sentido si la lnea inicial es un nmerofijo, pero s lo tiene si la lnea inicial es un nmero variable. Por ejemplo:si queremos hacer una operacin en cuatro lneas a partir de la lnea 10 (esdecir, hasta la lnea 13), podramos escribir como rango :10,10+3, peroeso es una tontera: es preferible escribir :10,13. Ahora bien, si la lneainicial es la actual, sea cual sea, escribir .,.+3 tiene bastante ms sentido.De hecho un argumento numrico para el comando : siempre se interpreta

    26

  • Captulo 2 Las nociones fundamentales de Vim

    de esta manera y si, por ejemplo, en el modo normal, tecleamos 4:, el cur-sor se trasladar a la lnea final de la pantalla y se escribir automticamenteel rango .,.+310.

    Al indicar rangos la primera lnea del documento se numera como lnea 1. Porotra parte cuando el comando provoca que en nuestro buffer se inserte texto, lalnea indicada representa la lnea bajo la cual se insertar el texto. Por ello en estoscomandos se admite como rango la lnea 0, cuando se quiere indicar que el textodebe insertarse exactamente al principio del documento.

    10Obsrvese que si escribimos 4: el rango predispuesto es .,.+3, eso es porque 4:significa que queremos trabajar sobre cuatro lneas contando la actual, por lo tanto la lnea de destinoser 41

    27

  • Captulo 3

    Comandos para el movimientodel cursor

    El hecho de que una de las formas de indicar el mbito de los comandos seauna operacin de movimiento del cursor hace que los comandos dirigidos a estafinalidad adquieran una importancia excepcional. Mucho mayor que en cualquierotro editor de texto.

    Pero adems, es que Vim est dotado del conjunto de comandos para movi-miento del cursor ms completo que existe (o que yo conozca). Hasta el punto deque con Vim podemos navegar entre las distintas partes de un documento de modomuy parecido a como lo haramos con un navegador de Internet en un documentocon enlaces e hipertexto.

    De otro lado, se considera comando de movimiento todo aquel cuyo efecto esque el cursor se desplace sin llegar a alterar el contenido del texto, con la nicaexcepcin de los saltos de hipertexto (tareas en la terminologa de Vim). Por lotanto en este grupo de comandos podemos diferenciar las siguientes categoras:

    1. Comandos especficamente dirigidos a mover el cursor.

    2. Comandos dirigidos a otra finalidad que tienen el efecto colateral de moverel cursor, por ejemplo los comandos de bsqueda de caracteres o palabras.

    3. Utilidades ofrecidas por Vim para saltar entre distintas partes del documento

    3.1. Comandos especficamente dirigidos a mover el cur-sor.

    En este grupo de comandos se incluyen todos aquellos cuya finalidad exclusivaes la de mover el cursor: es decir, que no sirven para ninguna otra cosa. A su vezse puede distinguir dentro de ellos los movimientos simples y los movimientos

    28

  • Captulo 3 Comandos para el movimiento del cursor

    basados en el reconocimiento de objetos. Tambin se han incluido, como grupoaparte, los comandos dirigidos a mover el cursor entre distintas lneas y los queproducen un salto a cierto carcter dentro de la lnea.

    3.1.1. Movimientos simples del cursor

    Para mover el cursor los comandos ms simples son, lgicamente, los represen-tados por las teclas de movimiento del cursor que nos permiten mover el cursor uncarcter a derecha o izquierda, o una lnea arriba o abajo, o desplazarlo al principioo al final de la lnea.

    En Vim funcionan las teclas de movimiento del cursor, y adems lo hacen tantoen el modo normal como en el modo de insercin. Pero se proporcionan tambincomandos equivalentes a ellos. Veamos cuales son y despus se explicar por quse proporcionan estos comandos.

    TECLA DEL CURSOR COMANDOFlecha izquierda hFlecha derecha lFlecha arriba kFlecha abajo j

    Inicio 0 (cero)Fin $

    RePag CTRL-UAvPag CTRL-D

    En la tabla anterior he usado el nombre espaol de las teclas de movimiento delcursor. En ingls las teclas Inicio, Fin, RePag y AvPag se llaman, respectivamente,Home, End, PgUp y PgDn.

    Por qu ofrece Vim un conjunto de comandos adicional para algo que ya hacenlas teclas del cursor? Por un triple motivo. El primero es el de que no todos losteclados tienen teclas de movimiento del cursor. Hay teclados muy antiguos, aun enfuncionamiento, que carecen de ellas y ello no debe impedir la ejecucin correctade Vim.

    La segunda razn es la de facilitar la escritura de scripts para Vim, ya que esms fcil referirse a las teclas de movimiento del cursor de la misma manera quese hace referencia al resto de comandos.

    Pero la razn fundamental es la de la efectividad. Los diseadores de Vimcalcularon que el comando que ms veces se repite durante una edicin de textonormal es el movimiento del cursor; y ms concretamente el movimiento carctera carcter o lnea a lnea, es decir: el que se suele hacer con las teclas de flecha.Ahora bien: si cada vez que hay que mover el cursor es preciso levantar la mano

    29

  • Captulo 3 Comandos para el movimiento del cursor

    del teclado normal para llevarla hasta las flechas y luego devolverla a su lugar deinicio, se pueden llegar a perder literalmente horas en estos movimientos; perosi las teclas para mover el cursor estn literalmente al alcance de la punta de losdedos, se ahorrar un tiempo precioso. No olvide el lector que los viejos usuariosde Unix (al igual que los viejos rockeros) tienen sus manas y una de ellas es elevitar prdidas injustificadas de tiempo.

    Esta razn explica tambin el porqu se han escogido las teclas hjkl paralos cuatro movimientos bsicos del cursor. Normalmente la tecla que ejecuta uncomando es la inicial del nombre del mismo en ingls, pero aqu no: estas teclasse han elegido por su situacin en el teclado: exactamente en la lnea central yen el lugar en el que reposan los dedos de la mano derecha de un mecangrafoprofesional cuando no est escribiendo: ms rapidez imposible.

    Esa razn llev a elegir como teclas para los movimientos bsicos hjkl. Elasignarle a cada una de ellas uno de los cuatro movimientos responde a otras razo-nes: la h es la que est ms a la izquierda, y por ello mueve a la izquierda; la les la ms a la derecha y por ello mueve en tal situacin. La j dicen los disea-dores de Vim parece una flecha apuntando hacia abajo y esa es la direccin enla que mueve el cursor, y la k es la nica tecla que queda por lo que se le asignala nica direccin que no hemos asignado aun.

    Los espaoles estamos acostumbrados a que el nombre de las teclas no nosdiga gran cosa, porque casi siempre se elige en ingls. Pero los angloparlantes noestn acostumbrados, y adems para ellos es casi una aberracin que la tecla l(inicial de left = izquierda) mueva precisamente a la derecha. Por eso es por loque en todos los manuales de Vim se explica con tanto detalle la razn de haberescogido estas teclas.

    Por otra parte, todos estos comandos admiten argumento numrico salvo elde ir al principio de lnea. El argumento numrico se traduce en el nmero demovimientos que se harn y as 3k mueve el cursor tres lneas hacia arriba, igualefecto que el que obtendremos pulsando 3 y luego la flecha arriba.

    El argumento numrico en el caso del movimiento hasta el final de lnea fun-ciona de manera especial, porque no tiene sentido ir ms de una vez al final de lalnea, cuando hemos ido una vez no tiene sentido volver a ir all. Por eso en estecaso el argumento numrico se interpreta como nmero de lneas hacia abajo, y as3$ desplazar el cursor hasta el final de la tercera lnea contando desde la actualhacia abajo.

    Ahora bien: como el comando para ir al principio de la lnea es un cero (0)aqu no cabe argumento numrico, pues entonces no habra forma de saber si el0 es ya la orden o forma parte del nmero. Esa es la razn de que en este casono se admita argumento numrico. Y lo mismo ocurre si en lugar del comando 0usamos la tecla Inicio el argumento numrico ser ignorado.

    30

  • Captulo 3 Comandos para el movimiento del cursor

    3.1.2. Movimientos basados en el reconocimiento de objetosYa se ha visto que Vim es capaz de reconocer ciertos objetos (palabras, p-

    rrafos, frases, etc). Pues bien: dispone de un conjunto de comandos para el movi-miento del cursor basados en dicho reconocimiento de objetos. En particular estoscomandos son los siguientes:

    Movimiento por palabras: En el movimiento por palabras las ideas fundamen-tales son las de Inicio de palabra y Final de palabra. Recurdese que paraVim una palabra es un conjunto de letras (y caracteres numricos), delimita-dos por caracteres que no son letras. Por lo tanto el principio de una palabraes la primera letra que tenga a la izquierda un carcter delimitador; y el finalde una palabra es la ltima letra que tenga a su derecha un carcter delimita-dor. Teniendo en cuenta lo anterior los movimientos posibles son:

    w Prximo principio de palabra.b Anterior principio de palabra.e Prximo final de palabra.

    ge Anterior final de palabra

    En ocasiones, sin embargo, estos movimientos pueden ser muy lentos, por-que a veces usamos ciertos caracteres que normalmente delimitan palabras,precisamente para unirlas. El ejemplo ms claro es el guin. Si escribimospara-choques lo que queremos es unir las dos palabras, pero los movimien-tos por palabras se detendrn en el guin. Por eso Vim proporciona los co-mandos W, B, E y gE que hacen exactamente lo mismo que lasversiones en minsculas con la salvedad de que en ellos slo se conside-ran delimitadores de palabras los caracteres invisibles, es decir: espacios enblanco, tabuladores y saltos de lnea.

    Movimiento por otros objetos de texto: Adems de por palabras, Vim tiene co-mandos de movimiento para los siguientes objetos de texto:

    ( Va al principio de la frase.) Va al final de la frase.{ Va al principio del prrafo.} Va al final del prrafo.| Va a la primera columna visible en la pantalla.

    Movimiento por objetos de programacin: Estos comandos existen porque unode los usos ms habituales de Vim es la escritura de programas, y ms con-cretamente, programas en C. Mediante estos comandos podemos movernosentre las distintas secciones del cdigo fuente de un programa:

    31

  • Captulo 3 Comandos para el movimiento del cursor

    [{ Llave que abre el bloque actual de llaves.]} Llave que cierra el bloque actual de llaves.[( Parntesis que abre el bloque actual de parntesis.[) Parntesis que cierra el bloque actual de parntesis.[* Inicio de la marca de comentario estilo C (/*).]* Final de la marca de comentario estilo C (*/).% Emparejamiento de delimitadores (vase ms adelante).

    3.1.3. Movimientos por y entre lneas

    Para el movimiento por y entre lneas, Vim cuenta con un rico conjunto deinstrucciones. Ya se vio a propsito de los movimientos simples del cursor que loscomandos 0 y $ se corresponden, respectivamente, con principio de lnea yfinal de lnea.

    Adems de estos comandos, se dispone de los comandos , -, + y de ungrupo de comandos que empiezan por la g: g0, g, g$, gk, gj

    El primero de ellos () mover el cursor al primer carcter de la lnea que nosea un espacio en blanco o un tabulador. El segundo, - hace lo mismo, peroacta sobre la lnea superior; al tiempo que + acta sobre la lnea inferior. Losrestantes comandos actan sobre la visualizacin en pantalla de las lneas que sondemasiado largas para caber en ella. En estos casos, dependiendo del valor de laopcin wrap puede ocurrir que slo veamos una parte de la lnea, ocultndosea derecha o izquierda el resto, o que la lnea se parta en el extremo derecho dela pantalla haciendo que nosotros veamos dos lneas donde en realidad slo hayuna11. Sea como fuere estos comandos actan no sobre la lnea real sino sobre lalnea que se ve en pantalla, y equivalen a los comandos similares sin la g. Esdecir: si, por ejemplo, el comando 0 lleva el cursor al principio de la lnea, elcomando g0 llevar el cursor al principio de la lnea que se ve en pantalla. Por lotanto cuando las lneas que se ven en pantalla coinciden exactamente con las lneasreales, no hay diferencia entre los comandos g0, g, g$, gk y gj, de unlado, y los comandos 0, , $, k y j de otro.

    Junto a estos comandos, para moverse entre lneas se dispone de:

    {Nmero}G: Lleva el cursor a la linea indicada.gg Lleva el cursor a la primera lnea del documento.

    G Lleva el cursor a la ltima lnea del documento.11Habr quienes al leer lo anterior no terminen de entenderlo, sobre todo si estn acostumbra-

    dos a manejar editores de texto del estilo de los usuales en Microsoft Windows. Para una mayorexplicacin, vase lo dicho en la seccin 5.1.1, pgina 52.

    32

  • Captulo 3 Comandos para el movimiento del cursor

    Se ver que gg y G actan sobre el documento en s mismo considerado.Si lo que queremos es movernos entre las distintas lneas que en un momento dadoson visibles en la pantalla, hay que usar los siguientes comandos:

    H Lleva el cursor a la primera lnea que se ve en pantalla.

    M Lleva el cursor a la lnea central de la pantalla.

    L Lleva el cursor a la ltima lnea de la pantalla.

    Por ltimo, en cuanto al movimiento del cursor a un nmero concreto de lnea,hay que decir que en Vim tambin podemos indicar que queremos mover el cursora la lnea que suponga un tanto por ciento concreto del documento; y as podemosindicar, por ejemplo, que lleve el cursor a la lnea central del documento, o a lalnea en la que empieza el segundo tercio del documento, etc.

    Todo esto se hace con el comando % precedido de un argumento numricoque representa el tanto por ciento buscado. As 50 % llevar el cursor a la lneaque representa el cincuenta por ciento del total del documento.

    FINALMENTE hay que aclarar que en algunos comandos de movimiento porlneas no tienen sentido los argumentos numricos y, por lo tanto, si se introducense ignoran. As ocurre en todos los que tengan que ver con la pantalla (H, M, L), oen los que enven el cursor a un lugar fijo (gg, G).

    3.1.4. Movimientos horizontales y saltos de lnea

    Los comandos que mueven el cursor horizontalmente, a derecha o izquierda,normalmente se detienen al principio o fin de una lnea. Esto llama la atencin delos usuarios novatos de Vim, porque en los editores de texto se acostumbra a que,por ejemplo, si se pulsa la flecha derecha estando el cursor al final de una lnea,se mueva al primer carcter de la prxima lnea, es decir: que un comando que enprincipio mueve horizontalmente puede mover tambin verticalmente.

    En Vim para conseguir este efecto hay que modificar la opcin whichwrap.Esta opcin controla qu comandos de movimiento horizontal pueden cambiar delnea, y en qu modos de funcionamiento. Sus posibles valores son los siguientes:

    Valor Comando Modob Normal y visuals Normal y visualh h Normal y visuall l Normal y visual< Normal y visual> Normal y visual Normal y visual[ Insercin y reemplazo] Insercin y reemplazo

    33

  • Captulo 3 Comandos para el movimiento del cursor

    As, para conseguir que las flechas del cursor derecha e izquierda puedan cam-biar de lnea al llegar a uno de sus extremos, habra que darle a esta opcin el valorh,l,,[,]. Personalmente me gusta darle todos los valores posibles.

    3.1.5. Bsqueda de caracteres en la lnea

    Los comandos de bsqueda de caracteres se diferencian de los de bsqueda depalabras en que los primeros actan inmediatamente y sirven para buscar exclusi-vamente un carcter individual dentro de la lnea en la que est el cursor; lo cual, alser tan restringido el mbito de la bsqueda, hace que esto sirva, sobre todo, paraprovocar un salto en el cursor hasta un carcter concreto.

    El comando bsico de bsqueda de caracteres es f (= find). Este comandobuscar la prxima aparicin en la lnea actual del carcter que sea tecleado in-mediatamente despus de l. As fh buscar la prxima h. Si va acompaadode un argumento numrico, se har la operacin varias veces, de modo que 3fhbuscar la tercera h. Si queremos buscar hacia detrs debemos usar F en lugarde f.

    Los comandos t y T (= to) son muy similares a f y F, con la salvedadde que mientras f coloca el cursor exactamente sobre el carcter buscado, t lodeja en el carcter inmediatamente anterior.

    En uno y otro caso, es decir: hayamos usado f, F, t o T, una vez quese ha localizado una aparicin del carcter buscado, con los comandos ; y ,podemos buscar la prxima aparicin del mismo carcter en la lnea actual: ;busca hacia delante y , busca hacia detrs.

    3.2. Comandos que pueden producir un movimiento delcursor

    En este segundo grupo de comandos incluyo aquellos comandos cuya finalidadprincipal no es mover el cursor, aunque pueden provocar ese efecto. Como a vecesla distincin con los anteriores es cuestin de matiz y todo depende de la finalidadcon la que el comando sea ejecutado, en el grupo anterior he incluido a los coman-dos que SOLO sirven para mover el cursor, y aqu a los que sirven para alguna otracosa, y adems provocan o pueden provocar un movimiento del cursor.

    3.2.1. Scroll de la pantalla

    Cuando un documento es demasiado grande para caber en una sola pantalla,en sta slo se muestra una parte del documento. Se suele llamar scroll a la

    34

  • Captulo 3 Comandos para el movimiento del cursor

    operacin por la que la pantalla se desplaza sobre el documento. Mucha gente sela con la direccin en que se hace un scroll. Para tener las ideas claras lo mejores que imaginemos al documento como una larga ristra de lneas, y a la pantallacomo una ventana que nos muestra cierto nmero de lneas. El scroll vertical eshacia abajo cuando movemos la pantalla hacia abajo; pero en ese caso obtenemosel mismo efecto que si dejramos la pantalla fija y moviramos el documento haciaarriba. Esta es la causa de que tanta gente confunda el scroll hacia abajo y haciaarriba.

    Las dos operaciones bsicas de scroll o desplazamiento de la pantalla se hacencon las teclas RePag y AvPag que equivalen a los mandatos CTRL-U y CTRL-D(vase la seccin 3.1.1, pgina 29). Adems de esos comandos Vim dispone de doscomandos para hacer scroll lnea a lnea se trata de C-Y y C-E que hacen scrollhacia detrs y hacia delante respectivamente.

    Usando estos comandos se ve por qu he incluido al scroll en este apartado,porque la finalidad principal del scroll no es mover el cursor, sino ver una o variaslneas que no estn visibles; y slo en el caso de que para mostrar dichas lneashaya que ocultar aquella en la que esta el cursor este cambia de posicin, porqueen Vim el cursor debe estar siempre a la vista. Pero el efecto del movimiento delcursor es colateral.

    3.2.2. Emparejamiento de caracteresHay caracteres que suelen ir por parejas, como los parntesis, los corchetes o

    las llaves. En un texto normal cuando un parntesis se abre, en algn lugar msadelante debe cerrarse.

    El comando % usado sin argumento numrico trabaja sobre estos caracteresque van por parejas. Colocado el cursor sobre uno de esos caracteres, saltar a sucomplementario. Esto es especialmente til en programacin cuando hay parn-tesis anidados, pues el comando sabr buscar el cierre exacto de un parntesis, ysi hemos olvidado cerrarlo no har nada, con lo que nos percataremos del error.Si el cursor no est exactamente sobre uno de los caracteres sobre los que actael comando %, este buscar el primer carcter que defina un par y saltar a sucorrespondiente pareja.

    En principio % trabaja sobre las parejas () [] y {}. No trabaja sobre las parejas? !, dado que esas parejas de caracteres no existen en ingls (ni en ningn idio-ma distinto del espaol). No obstante mediante la opcin matchpairs podemosdefinir los caracteres que queremos que respondan al comando %.

    35

  • Captulo 3 Comandos para el movimiento del cursor

    3.2.3. Bsqueda de palabras

    La bsqueda de palabras se diferencia de la bsqueda de caracteres en queahora la bsqueda no se limita a un carcter solo, sino que se pueden buscar dos oms caracteres y, adems, el rango de la bsqueda no se limita a la lnea actual.

    Como Vim no tiene forma de saber cuntos caracteres queremos buscar, estoscomandos tienen una peculiaridad y es que aunque no sean comandos de los queantes llam de lnea de comandos, no se ejecutan hasta que pulsemos INTRO yadems hay eco en pantalla del texto que queremos buscar segn lo tecleamos. Esdecir: Cuando pulsamos el carcter asociado a estos comandos, el cursor salta a laltima lnea, donde podremos escribir la cadena a buscar.

    Un tipo especial de bsqueda por palabras es la que usa expresiones regulares.Pero la dificultad de estas expresiones aconseja que no sean tratadas aqu. Lasexpresiones regulares no son abordadas en este documento. Tal vez ms adelanteescriba alguno monogrfico sobre ellas.

    Comandos bsicos de bsqueda: Los comandos bsicos de bsqueda son /para buscar hacia delante y ? para buscar hacia detrs.

    Tras pulsar cualquiera de estos comandos, el cursor salta a la lnea inferior don-de podremos escribir la cadena a buscar. Tambin podremos navegar por el historialde bsquedas anteriores, que funciona de modo similar al historial de comandos.Cuando hayamos terminado de escribir la cadena a buscar hay que pulsar INTROy la bsqueda empezar en la direccin indicada; si se encuentra la cadena buscadael cursor se desplaza al principio de la misma; si se llega al final del documento (oal principio en las bsquedas hacia atrs) y no se ha encontrado, automticamenteseguir la bsqueda por el principio (o por el final) y solo se detendr cuando sellegue al punto donde empez, en cuyo caso es claro que el texto buscado no esten el documento.

    Una vez localizada la primera aparicin del texto buscado, los comandos ny N nos permiten localizar las prximas apariciones. n busca la prxima apari-cin en el sentido en el que se hizo la bsqueda original; N invierte dicho sentido;es decir: si la bsqueda se realiz con el comando / n busca la prxima apari-cin hacia delante y N busca la anterior aparicin. Pero si la bsqueda se realizcon ? estos comandos funcionan al revs.

    Por ltimo, /, ?, n y N admiten argumentos numricos.

    Configuracin de ciertas caractersticas de las bsquedas En relacin con lasbsquedas hay que tener en cuenta las siguientes cuestiones:

    Maysculas y minsculas: El que las bsquedas sean o no sensibles a la dife-rencia entre maysculas y minsculas depende de si est activada la opcinignorecase o la de noignorecase. Una u otra se activan mediante el co-

    36

  • Captulo 3 Comandos para el movimiento del cursor

    mando :set opcin. Por defecto en Vim est activado noignorecase loque significa que las bsquedas diferencia entre maysculas y minsculas.Entre ignorecase y noignorecase se encuentra ignorecase smartcase;en este ltimo caso la bsqueda slo distinguir entre maysculas y mins-culas en el supuesto de que en la cadena de bsqueda se hayan utilizadoletras maysculas. Tambin es posible usar los caracteres \c y \C en unacadena de bsqueda concreta para conseguir que, con independencia del va-lor general de la opcin ignorecase, dicha cadena sea sensible a la distincin(\C) o no lo sea (\c).

    Bsqueda por palabras completas: No hay en Vim ninguna funcin o variableque permita buscar directamente por palabras completas. Pero para ello po-demos usar la caracterstica de las expresiones regulares. Si \ es el de final de palabra, encerran-do el texto buscado entre ambos indicadores, la bsqueda ser por palabrascompletas.

    Buscar la palabra bajo el cursor Si lo que deseamos es simplemente localizar laprxima aparicin de la palabra que est bajo el cursor, los comandos * y# la buscarn automticamente para nosotros hacia delante (*) o haciaatrs (#). Adems la bsqueda ser directamente por palabras.

    Iluminacin de resultados de la bsqueda La iluminacin de resultados consis-te en que cuando se realiza una bsqueda, todas las apariciones en el bufferdel texto buscado se resalten con un color distinto y se mantengan resalta-das hasta que se realice otra bsqueda. Ello se consigue mediante la opcinhlsearch. Para desactivar esta utilidad hay que establecer la opcin nohl-search; esta ltima adems de una opcin es un comando (de lnea de co-mandos); la diferencia entre :set nohlsearch y :nohlsearch est enque en el primer caso se desactiva la iluminacin de resultados: a partir deahora los resultados de las bsquedas no se iluminarn. Pero si se ejecutael comando el efecto es slo el de que desparezcan la iluminacin actual(correspondiente a la ltima bsqueda hecha), pero como la utilidad de ilu-minacin sigue activa, la prxima bsqueda volver a producir iluminacinde resultados.

    Bsqueda incremental: Para conseguir que la bsqueda se vaya efectuando con-forme vamos tecleando el texto a buscar (que es una de las cosas de Emacsque a m ms me gustan), hay que activar la opcin incsearch mediante elcomando :set incsearch. El efecto de esta opcin es el de ir mostrandoen pantalla la primera aparicin del texto tecleado. Pero el cursor no llega amoverse hasta que pulsamos la tecla INTRO.

    Bsqueda circular: Si no queremos que la bsqueda contine despus de haberllegado al final del documento (o al principio), debemos activar la opcin

    37

  • Captulo 3 Comandos para el movimiento del cursor

    nowrapscan; para volver al comportamiento de Vim por defecto hay queactivar rawscan.

    Desplazamientos: Por defecto la bsqueda deja el cursor al principio del textobuscado. Podemos no obstante indicarle un desplazamiento concreto aa-dindolo a la cadena de bsqueda separado del texto a buscar por el carcter/. Por ejemplo el comando /texto/3 buscar la cadena texto y cuan-do la encuentre desplazar el cursor tres lneas. El nmero indicado puedeser positivo o negativo. Tambin podemos indicar un desplazamiento dentrodel texto buscado. Pare ello se usan los indicadores de desplazamiento by e seguidos de un nmero positivo o negativo. b se refiere al principiodel texto buscado (b = beginning) y e al final del texto buscado (e = end);el nmero positivo o negativo indica a qu distancia del principio o del fi-nal del texto debe colocarse el cursor. Por ejemplo /texto/e-2 dejar elcursor sobre la x de texto.En las bsquedas hacia atrs el carcter que separa el texto a buscar delindicador de desplazamiento es ? en lugar de /.

    Caracteres especiales en las bsquedas En la cadena de bsqueda podemosintroducir cualquier carcter. Aunque hay algunos caracteres que requieren un tra-tamiento especial. Se trata de los siguientes:

    . * [ ] % / \? $Estos caracteres son usados en las expresiones regulares y por lo tanto tienen un

    significado especial. Por ello cuando queramos usarlos en su significado habitual,debemos precederlos del signo \.

    Hay otros dos caracteres que no se pueden introducir en la cadena de bsqueda.Se trata del salto de lnea, ya que este se escribe con la tecla INTRO, pero cuandopulsamos esa tecla Vim interpreta que eso significa que ya hemos terminado deescribir la cadena de bsqueda. Por esta razn para buscar un salto de lnea hay queescribir \n. Asimismo, aunque en la cadena de bsqueda podemos perfectamenteincluir un tabulador, por razones de compatibilidad (o por las que sean) se permiteque nos refiramos al tabulador como \t.

    Por otra parte cuando buscamos ms de una palabra, estas normalmente estnseparadas por espacios en blanco. Sin embargo es posible que Vim haya sustituidoalguno de esos espacios en blanco por saltos de lnea, e incluso por saltos de lnea+ cierto nmero de espacios en blanco requeridos por el sangrado. El carcter debsqueda \_s significa: un espacio en blanco o un salto de lnea. El carcter debsqueda \_s\+ significa un espacio en blanco o un salto de lnea seguido decualquier nmero de espacios en blanco.

    38

  • Captulo 3 Comandos para el movimiento del cursor

    3.3. Marcas y saltos entre partes del documento

    Una marca en el documento es una seal invisible que Vim coloca en un lugardel mismo de tal manera que luego sea posible desplazar el cursor con facilidad allugar en donde se encuentra la marca.

    3.3.1. Marcas automticas

    Cuando realizamos un salto a cierta posicin con algunos comandos (gran partede los de movimiento del cursor), Vim recuerda la posicin previa. A esta posicinprevia se le denomina marca. Mediante el comando `` (dos acentos graves)podemos regresar a la posicin anterior al salto. Usando el mismo comando porsegunda vez volveremos a la posicin a la que saltamos.

    Los comandos que generan marcas de este tipo son todos aquellos que soncapaces de mover el cursor a una lnea distinta de la actual, lo que incluye los co-mandos de bsqueda (/, ?. n, N), pero no la bsqueda por caracteres (f,F, t, T) o el movimiento por palabras (w, e, b, ge) ni los comandosj o k.

    Para ver una lista de las marcas que nuestros saltos han ido generando, hay queusar el comando :jumps

    3.3.2. Marcas manuales

    Tambin podemos realizar nuestras propias marcas en el documento: El co-mando m seguido de una letra generar una marca cuya denominacin es la de laletra pulsada a continuacin. Por lo tanto ma genera la marca llamada a en ellugar del cursor. Como para estas marcas slo se admiten letras del alfabeto ingls,no podemos generar ms que 26 marcas de este tipo.

    Bueno, en realidad podemos generar 52: 26 en minsculas y 26 en maysculaspuesto que Vim diferencia entre minsculas y maysculas. Pero