manual vim

Upload: gregorio-gomez-r

Post on 02-Mar-2016

336 views

Category:

Documents


2 download

TRANSCRIPT

  • Manual de VIM

    Santiago Romero http://www.escomposlinux.org/sromero/

    6 de abril de 2005

  • ndice general

    1. Introduccin 3

    2. Funcionamiento bsico de Vim 4

    2.1. Modo insercin y modo comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2.2. El fichero .vimrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.3. Comandos bsicos: movimiento, insercin y borrado . . . . . . . . . . . . . . . . . . . . 7

    2.4. Counts o repetidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.5. Movimiento ms avanzado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.6. La manipulacin del fichero (abrir, guardar, salir) . . . . . . . . . . . . . . . . . . . . . . 112.7. Qu sabemos hacer hasta ahora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3. Ms sobre cambios 12

    3.1. Modo reemplazar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.2. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.3. Otros comandos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.3.1. El comando punto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.3.2. El comando ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    3.3.3. Los comandos I y A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4. Bsquedas 17

    4.1. Maysculas y minsculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.2. Resaltado de las bsquedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.3. Expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.3.1. Caracteres especiales a escapar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.3.2. Bsqueda de palabras completas . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.4. Sustituir (reemplazar) cadenas en el texto . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    1

  • NDICE GENERAL 2

    5. Marcas en el texto 22

    5.1. Establecer y recuperar marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    5.2. Marcas especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    6. Copiar y pegar 25

    6.1. Seleccionar: el modo visual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    6.2. Copiar, cortar y pegar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    6.3. El portapapeles del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    6.4. Tuberas (pipes) para filtrar texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    6.5. Insertar ficheros y salida de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    7. Coloreado de sintaxis 29

    7.1. Consideraciones sobre el coloreado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    8. El fichero .vimrc 31

    8.1. Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    8.2. Sustituciones o Abreviaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    8.3. Mapeados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    9. En resumen 35

  • Captulo 1

    Introduccin

    Este pequeo tutorial pretende ser una referencia rpida y de introduccin al editor Vim (Vi IMproved)para aquellos que ya lo utilizan de una forma bsica (abrir fichero, modificar, guardar y salir) pero quierenampliar sus conocimientos sobre los comandos bsicos que ofrece VIM para hacerles la vida ms cmoday sencilla.

    El tutorial puede ser algo largo, pero est organizado de forma que puedas empezar a leerlo desde elprincipio y parar en el momento en que lo que se explica est por encima de tus necesidades. Podradecirse que est escalonado de forma que los novatos se puedan leer las primeras pginas, los intermediospuedan leer algunas ms, y los expertos puedan quejarse de lo bsico que es :-). La idea es que cualquierapueda leerlo y aprender uno, dos o veinte comandos/trucos de Vim, y volver a leerlo pasado un tiempo,y volver a aprender cosas nuevas Est escrito de forma que nadie necesite leerlo entero para que le seatil. En muchos tutoriales te queda la sensacin de que si lo dejas a medias no terminas de aprender laaplicacin que ests estudiando. En este manual de Vim he intentado que no sea as.

    Si eres novato y te abruma ver tantas combinaciones de teclado o explicaciones, tmatelo con calma. Lee uncaptulo, y prueba todos los comandos u opciones editando un fichero de texto. Aplca esos comandos cadavez que puedas, utilizando vim para hacer tus tareas de edicin de textos, y vers como pasado un tiempo,lo que leste la anterior vez te parece bsico y puedes avanzar algo ms en el tutorial. Simplemente datetiempo. Yo, personalmente, he aprendido muchas cosas escribiendo este tutorial.

    Este tutorial est basado, simplemente, en la ayuda del programa. Mi idea fue leerme las casi 400 pginas deayuda de Vim (su manual, al que puedes acceder tecleando :help en modo comando) y hacer una sntesis oresumen en castellano que se pueda leer de forma escalonada. Espero que os sea til y os ayude a comenzara utilizar este fantstico editor. La parte inicial del tutorial contiene bastante texto, porque se correspondecon el momento en que no estamos familiarizados con los comandos de Vim y las explicaciones necesitanser ms profundas, pero conforme avanzamos en el texto, las descripciones sern ms someras, ya que sihemos llegado hasta all, directamente estaremos asimilando los comandos y conceptos sin necesidad deexplicaciones complejas.Para seguir el tutorial simplemente os recomiendo que tengis instalada alguna versin nueva de VIM (quepodis descargar en http://www.vim.org o bien utilizando el sistema de paquetes de vuestra distribucinLinux) y sobre todo que tengis ganas de aprender a utilizarlo. Adems del tpico VIM de lnea de coman-dos, existen implementaciones de Vim con un Interfaz Grfico (GUI), como gvim, kvim, y la propia deWindows. Y es que recordad que existen versiones de Vim no slo para UNIX / Linux, sino tambin paraMSDOS y Windows, por ejemplo, de forma que las ventajas de utilizar Vim las podis aprovechar tambinen ordenadores Windows que os obliguen a utilizar en Universidades, o en el trabajo, por ejemplo. As quearmados con VIM instalado para nuestro sistema operativo favorito y algo de tiempo para leer, entremosen materia.

    3

  • Captulo 2

    Funcionamiento bsico de Vim

    En este tutorial se asume que el lector conoce cosas bsicas de vim, tales como su instalacin, su ejecucin(vim para crear un nuevo documento o vim fichero para editar un fichero existente), o como salir delfichero sin grabar en l (:q!). Algunos conceptos bsicos de vim sern tratados, simplemente para queel tutorial no pierda su carcter de resumen (y de paso, permitir su lectura a gente que todava no conocevim).

    Vim es un editor de textos, en contraposicin a lo que se conoce como procesador de textos. En un pro-cesador de textos es muy importante el formato del texto: cursivas, negritas, ttulos, centrado o justificado,color y tamao de la fuente, etc. El procesador de texto est pensado para ver e imprimir textos donde elformato es importante. Vim, en cambio, se utiliza para editar texto. Lo importante no es el formato deltexto sino el texto en s mismo. As, Vim se utiliza para programar, para escribir emails, para editar textos,cdigo HTML, ficheros de configuracin del sistema, etc. Los procesadores de texto estn centrados enofrecer muchas cosas para el formateado del documento, mientras que Vim est pensado para facilitar lalabor de introduccin y edicin del texto. No es muy til editar un fichero de configuracin o programarcon OpenOffice o Word al igual que no tiene mucho sentido utilizar Vim para editar un documento pensa-do para imprimirlo como si fuera un poster, por ejemplo (pese a que gracias al lenguaje de programacinLATEX, esto se puede hacer en Vim :-).

    Por eso, cuando quieras programar, editar ficheros de configuracin, o simplemente, hacer tu trabajo contexto de una forma ms rpido, lo mejor es utilizar un editor de texto. Y como veremos, Vim es especialpara hacer esta labor, por encima del 99 % de editores restantes.

    El editor Vim es una evolucin del clsico editor VI. VI es un editor que encontraremos presente en casiel 100 % de los sistemas UNIX (y si no est presente por defecto se puede instalar), por lo que conocersu uso es prcticamente una obligacin para los Administradores de Sistemas. Por suerte, Vim se diseheredando casi todas las teclas y opciones de VI, de modo que siguiendo este tutorial nos aseguramos losconocimientos necesarios para manejar VI a nivel bsico y medio. Podis pensar en VIM como un VImejorado, al cual podris aplicar la mayora de conocimientos de movimiento y edicin que veremos aqu.

    Como veremos en la siguiente seccin, con Vim vamos a editar ficheros de texto con muchas ventajassobre otros editores. Podremos modificar ficheros de una manera muy eficiente, y encontrar numerosasfacilidades a la hora de programar, todo ello gracias a que VIM, como veremos, es un editor bimodal.

    4

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 5

    2.1. Modo insercin y modo comando

    Como muchos ya sabis, a la hora de editar textos, cuando ejecutamos este maravilloso editor, Vim trabajaen dos modos: modo comando y modo insercin. Se dice que es un editor bimodal (con 2 modos de trabajo).En todo momento sabremos en cul de los 2 modos estamos gracias a la informacin que aparece en la barrade estado del editor (la ltima lnea de la pantalla).En modo comando (el modo en que est VIM tras ejecutarlo) las teclas que pulsamos, en lugar de aparecerescritas en el documento, son interpretadas por Vim como comandos y nos permiten realizar acciones comograbar, salir, copiar, pegar, etc. Por ejemplo, pulsando ZZ en modo comando, no vamos a escribir doszetas maysculas en el documento, sino que vamos a salir de vim grabando el fichero que estamos editando.

    El modo insercin s que nos permite introducir caracteres en el fichero, en la posicin actual del cursor,al estilo de los editores bsicos a los que estamos acostumbrados. Estando en modo insercin, si pulsamosZZ, se insertarn dos zetas maysculas en la posicin actual del cursor, tal y como cabra esperar enun editor normal. Cuando estamos en modo insercin aparece la cadena INSERTAR en la barra deestado del editor (la ltima lnea de pantalla).Para pasar al modo insercin desde el modo comando se utiliza la tecla/comando i, y para volver al modocomando se utiliza la tecla ESC.

    El hecho de disponer de 2 modos y tener que pasar de uno a otro puede parecer algo confuso o inclusoun engorro, pero es justo la mejor baza de vim; es lo que le proporciona su potencia, lo que los demseditores no pueden hacer: aplicar comandos al texto. Es mucho ms cmodo borrar una lnea completa conel comando dd en vim que seleccionar la lnea con el teclado o ratn y borrarla con la tecla DEL o SUPRen otro editor.

    Alguien puede decir bueno, seguro que cualquier otro editor tambin tiene un atajo de teclado para borrarla lnea actual completa. Bien, imaginemos que la tiene (suele ser CTRL+Y), pero ... y si quieres borrarlas 30 lneas siguientes a la del cursor (includa esta)? Vas a pulsar 30 veces el atajo de teclado? Vas aseleccionar con el ratn o el teclado las 30 lneas? No es mucho ms cmodo el modo comando de vim,donde slo hay que ejecutar el comando 30dd? Y es que 30dd para vim significa ejecuta 30 veces elcomando dd, es decir, borra 30 lneas. Esto slo se puede hacer gracias a la potencia del modo comando.

    Cuando se es un novato en vim, y uno est acostumbrado a otros editores que cree ms potentes, puedepensar que el hecho de que este editor se utilice con el teclado (sin necesidad de ratn) y mediante todotipo de atajos, opciones, e incluso con 2 modos diferentes (comando e insercin) es algo arcaico, obsoletoy lento, cuando la realidad es toda la contraria. Si alguien te dice que vim es un editor viejo que no puedehacer lo mismo que su editor favorito (sea cual sea), da por sentado que esa persona no conoce vim ni loha usado ms all de cambiar 2 ficheros de configuracin con l en una prctica de la Universidad. Habladesde el desconocimiento y desde el miedo, sentado en su comodsimo editor (para Windows, seguramente)con muchos menes y opciones para usar con el ratn. Y se equivoca. Pero no trates de convencerle, djaleque use su editor, porque en el pecado est la penitencia :-).Vim es muy muy muy potente, no es un simple editor. La clave de Vim es estar el mayor tiempo quese pueda en modo comando, pasando a modo insercin slo cuando se requiera introducir texto en eldocumento. Cuando estemos escribiendo emails o documentos de texto es muy probable que estemoscasi todo el tiempo en modo insercin (a menos que queramos corregir algo que hayamos escrito), peroprogramando o editando ficheros de configuracin ocurrir justo lo contrario. Los atajos de teclado delmodo comando se hacen algo complicados de entender al principio, pero tras el uso continuado de Vim sedesarrolla en nuestra mente la forma de utilizar esos comandos de forma totalmente intuitiva, sin pararnosa pensar en ellos.

    Cuando empieza a utilizarse vim slo se conoce el funcionamiento bsico, pero con el tiempo uno comienzaa descubrir toda la potencia de este genial editor y empieza a cambiar la concepcin de tiene de l: Vim noes slo un editor, es una forma de vida en UNIX.

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 6

    2.2. El fichero .vimrc

    En vim podemos modificar muchos parmetros del editor mientras editamos los ficheros. Por ejemplo,tecleando :set number (dos puntos, set number, intro), todas las lneas del fichero estarn numeradas ydicha numeracin aparecer en pantalla, algo que puede ser til para programar.

    Otro ejemplo, tecleando :syntax on, activaremos para el fichero actual el coloreado de sintaxis, es decir,que las palabras especiales que el editor entienda como que tienen un significado concreto aparecern endiferentes colores. Si estamos programando en C, por ejemplo, las palabras claves aparecern de un color,las cadenas de otro, etc (algo realmente til a la hora de programar).

    Pues bien, cualquier tipo de opcin, macro, comando o funcin que vim entienda puede ser includa enel fichero .vimrc en el directorio $HOME de nuestro usuario (o en un fichero _vimrc en el directoriode instalacin de VIM o en el padre del Escritorio del usuario en Windows ) de forma que se apliquecomo opcin por defecto cuando editemos cualquier fichero. As, podemos creamos un fichero .vimrc (pordefecto normalmente no existir), que contenga lo siguiente:

    set numberset rulersyntax on

    Esto har que siempre que editemos un fichero, aparezcan numeracin de lneas (set number), un indicadorde fila y columna en la barra de estado (set ruler) y resaltado de sintaxis (si est definida para el tipo defichero que estamos editando) activado. Es algo as como el fichero de opciones de vim para nuestrousuario (y slo para nuestro usuario). Existe un fichero de opciones general /etc/vimrc (normalmente)cuyos cambios afectan a todos los usuarios cuando arrancan vim, pero lo que incluyamos en nuestro .vimrcslo afectar a vim cuando lo ejecutemos con nuestro usuario del sistema.

    As, podemos utilizar dicho fichero para indicar aquellas configuraciones con las que estemos ms cmo-dos, de forma que podamos adaptar vim a nuestras necesidades. Es normal que en estos momentos inicialesno conozcamos vim lo suficiente como para hacernos un .vimrc decente, pero para empezar os recomiendoalgo como lo que sigue:

    Fichero .vimrc de mi usuario Los comentarios se ponen con comillas

    set nobackupset ruler

    nocompatible permite funciones que VI no soportaset nocompatibleset vbset noerrorbellssyntax on

    Poco a poco podris ampliar este fichero con ms opciones, macros (que explicar ms tarde), etc.

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 7

    2.3. Comandos bsicos: movimiento, insercin y borrado

    Un primer contacto con Vim puede ser tan simple como editar un fichero con vim fichero, pasar a modoinsercin (pulsando i), moverse por el documento, cambiar e introducir texto, volver a modo comando(pulsando ESC), y salir del editor grabando los cambios en el fichero pulsando ZZ (2 zetas maysculas).Como toma de contacto inicial es suficiente y puede servir para perder el miedo al hecho de que Vim tenga2 modos de funcionamiento (comando e insercin).

    Lo siguiente que debemos hacer con nuestro editor es aprender a movernos por el texto. Supongamosque hemos creado/editado un documento con Vim, y tenemos que movernos por l (y aadir/cambiarcosas). Como siempre, en modo insercin (si tenemos bien configurada la variable $TERM del sistema)podremos movernos con las teclas clsicas de los dems editores: cursores, Inicio, Fin, RePg, AvPg, etc.No obstante, la potencia real de Vim la encontramos con las posibilidades de movimiento definidas en elmodo comando. Aparte de que en modo insercin estamos muy limitados (movimiento en las 4 direcciones,principio y fin de lnea, y anterior y siguiente pgina), algunas combinaciones de teclado no tienen por qufuncionar en ciertas mquinas, Sistemas Operativos o configuraciones de teclado (en Solaris, AIX, HPUX,o utilizando telnet/ssh contra otra mquina). El movimiento en modo comando es mucho ms estndar (alutilizar teclas bsicas del teclado y no teclas extendidas) y nos permite mucho ms juego.

    La regla general de Vim es moverse y trabajar siempre en modo comando y slo pasar a modo insercin paraintroducir texto en nuestro documento (volviendo a modo comando al acabar la insercin/modificacin),ya que el modo comando es el lugar donde podremos usar todas las opciones que en otros editores no sepueden realizar, o que all se hacen con complejas combinaciones de teclas mucho ms difciles de recordarque una o dos teclas simples del teclado.

    Veamos los diferentes comandos bsicos de movimiento, insercin y borrado (siempre en modo comando):

    Comando Significadoh Mover el cursor a la izquierda.j Mover el cursor hacia abajo.k Mover el cursor hacia arriba.l Mover el cursor hacia la derecha.i Insertar texto en la posicin actual del cursor (Insert), pasando a Modo Insercin. Se

    permanece en modo insercin hasta que se sale explcitamente de l.ESC Salir del modo insercin y volver a modo comando. En modo comando, permite can-

    celar muchos de los comandos que se estn ejecutando.x Borrar el caracter bajo el cursor (equivale a la tecla Del/Supr).J Juntar la lnea actual con la siguiente (Join), eliminando el retorno de carro entre ellas.u Deshacer la ltima accin (Undo). Si lo pulsamos ms veces desharemos acciones

    anteriores.CTRL+R Rehacer la ltima accin (Redo). Si lo pulsamos ms veces reharemos acciones pos-

    teriores deshechas.a Insertar texto en la siguiente posicin tras el cursor (Append). Es similar a i, salvo

    que el texto no se inserta en la posicin actual del cursor sino a su derecha.o Crear una lnea vaca, en blanco, bajo la lnea actual, y pasar a modo insercin con

    el cursor posicionado en dicha lnea. Es mucho ms cmodo que (como en otroseditores) tener que pulsar FIN y ENTER para crear una lnea en blanco.

    O Crear una lnea vaca, en blanco, sobre la lnea actual. Sera el equivalente en otroseditores a ARRIBA, ARRIBA, FIN, ENTER.

    dd Borrar la lnea actual (sobre la que est el cursor).

    Como podis ver, la existencia de ciertos comandos (como o, O, o dd) est pensada para evitar

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 8

    la mayor cantidad de pulsaciones de teclas/ratn posible. Borrar lneas con dd es mucho ms rpido ysencillo que llevar la mano al ratn o a SHIFT+cursores en otros editores, e induce a muchos menoserrores. Tambin, pulsar J (jota mayscula) para juntar una lnea con la lnea siguiente es mucho msrpido que bajar a la siguiente lnea, irse al principio de la misma, y pulsar borrar para subirla a la lneaanterior.

    2.4. Counts o repetidores

    En la mayora de comandos podemos aadir counts, que es como se conoce a los repetidores del co-mando. El count es un nmero que se teclea antes del comando para que se repita varias veces. Unido a lapotencia del modo comando nos da mucho juego para la edicin. Veamos unos cuantos ejemplos:

    Comando Significado10dd Repetir 10 veces el comando dd, es decir borrar 10 lneas empe-

    zando desde la lnea actual. Es el equivalente a teclear manualmente10 veces dd, y mucho ms rpido que seleccionar 10 lneas a manocon ratn o cursores.

    5x Repetir 5 veces el comando x, es decir, borrar 5 caracteres empe-zando desde el carcter actual. Equivale a pulsar manualmente 5 vecesel comando x.

    60i- Insertar 60 guiones consecutivos. Este comando se teclea en modocomando pulsando 6, 0, i, guin, y pulsando la tecla ESCAPE. Al ha-cerlo, estamos diciendo que se repita 60 veces la secuencia i guinESCAPE, es decir, pasar a modo insercin, escribir un guin, y vol-ver al modo comando pulsando ESCAPE. El 60 que hay delante lorepite 60 veces, con lo cual tenemos 60 guiones en pantalla. No esmucho ms cmodo al programar, para introducir separadores de co-mentarios, que pulsar el guin 60 veces o durante varios segundosmientras miramos la columna en la que estamos?

    10iHola Aparece la palabra Hola 10 veces en pantalla, cada vez en una lneapropia. Su significado, al igual que en el ejemplo anterior, sera re-pite 10 veces la secuencia i, Hola, ENTER, ESC, que pasa a modoinsercin, escribe Hola, pasa a la siguiente lnea con ENTER, y vuel-ve a modo comando.

    Los 2 ltimos ejemplos son bastante ilustrativos de la potencia de Vim en modo comando. Lo que en otroseditores requiere varios segundos de presin de la tecla - para poner una raya horizontal (por ejemplo, encomentarios en C o C++ tras // para separar funciones o clarificar los comentarios), en Vim se puede hacercon un simple comando, y sin miedo a poner guiones de ms ni de menos o estar fijndose en la columnamientras los aadimos. Le pedimos a Vim que aada 60 guiones y lo har directamente y sin posibilidadde error.

    El ltimo ejemplo nos muestra cmo repetir N veces una determinada frase en nuestro documento. No esnecesario escribir, seleccionar, y pegar, pegar, pegar y pegar mientras contamos las frases que llevamoshasta tener nuestras 10 frases escritas como en otros editores. A Vim le decimos que repita la insercin 10veces y lo hace sin necesidad de intervencin extra por nuestra parte.

    Los multiplicadores de comandos son muy tiles y pueden aplicarse a muchos de los comandos que vere-mos en este tutorial, aunque no lo digamos explcitamente aqu.

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 9

    2.5. Movimiento ms avanzado

    Hemos dicho que con el modo comando de Vim tenemos muchas ms opciones que con el modo insercin(o que en otros editores), pero hasta ahora slo hemos visto una nfima parte de las posibilidades de Vim.Como veremos ahora, no tenemos porqu movernos carcter a carcter, lnea a lnea o pgina a pgina.Vamos a poder movernos a la palabra anterior y la siguiente, a cualquier parte del fichero, etc.

    Comando Significadow Mueve el cursor al principio de la siguiente palabra de la lnea actual, o de la

    siguiente lnea si estamos en la ltima palabra de la lnea.b Mueve el cursor al principio de la anterior palabra de la lnea actual, o de la

    anterior lnea si estamos en la primera palabra de la lnea.e Igual que w, pero coloca el cursor en el ltimo carcter de la siguiente palabra

    (al final de la palabra en lugar de al principio).ge Igual que b, pero coloca el cursor en el ltimo carcter de la anterior palabra.W, B, E y gE Iguales que w, b, e y ge, pero con una peculiaridad. En maysculas,

    nos movemos de palabra en palabra considerando como separador de palabraslo los espacios en blanco y retornos de carro, mientras que en minsculas,Vim utiliza un modo inteligente con ms separadores de palabras, como elguin o la barra. Por ejemplo, en el caso de tener la frase cadena1-cadena2cadena3 o cadena1/cadena2 cadena3 con el cursor sobre el primer carcter,w avanzara el cursor hasta primera letra de cadena2, mientras que W loavanzara hasta la primera letra de cadena3.

    $ Mueve el cursor al final de la lnea (equivalente a la tecla Fin).0 Mueve el cursor al principio de la lnea (equivalente a la tecla Inicio).^ Mueve el cursor al primer carcter no blanco de la lnea. Perfecto a la hora de

    programar, cuando queremos corregir cosas en el cdigo, normalmente indenta-do con espacios o tabuladores al principio de las lneas.

    f Realiza una bsqueda en la lnea actual del carcter indicado. Por ejemplo, fxmueve el cursor a la primera aparicin del carcter x desde la posicin actual.Muy til para ir rpidamente a partes concretas de una lnea sin llevar la mano alratn (por ejemplo, para corregir una h que sea un error ortogrfico, pulsandofh.

    F Igual que el comando anterior, pero realizando la bsqueda hacia atrs en la lneaactual (empezando desde la posicin actual del cursor).

    tyT

    Similares a f y F salvo que posicionan el cursor en elcarcter anterior a la letra buscada.

    ; Repite la ejecucin del ltimo comando f, F, t o T hacia la derecha.. Repite la ejecucin del ltimo comando f, F, t o T hacia la izquierda.ESC En el caso de bsquedas f, F, t o T, permite cancelar la bsqueda.% Al pulsarlo sobre un parntesis abierto o cerrado (, ), corchete abierto o ce-

    rrado [, ] , o llave abierta o cerrada {, }, mueve el cursor a la pareja dedicho elemento. Por ejemplo, si estamos programando y queremos saber cules el parntesis que cierra el parntesis sobre el cual est el cursor, pulsamos %y vim nos lleva directamente a l. Como tambin funciona con corchetes y lla-ves, podemos encontrar fcilmente qu llave cierra un bloque de cdigo, o quif/for/while/loquesea es el que ha abierto una determinada llave de cierre en unprograma en C que estemos depurando.

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 10

    Comando SignificadoG Ir a la lnea nmero NUMERO del documento. Por ejemplo, 100G nos llevara

    a la lnea nmero 100. Es especialmente til a la hora de programar, cuandotenemos que ir a lneas concretas del programa donde el compilador nos hareportado errores.Si no estamos programando pero queremos utilizar nmeros de lneas (porquenos parece ms cmodo), podemos hacer uso de las siguientes opciones de modocomando:

    :set number Activa la numeracin de lneas.

    :set nonumber Desactiva la numeracin de lneas.

    :set ruler Activa en la barra de estado una indicacin de la columna y fila ac-tual.

    Cualquiera de estas opciones las podemos poner en nuestro fichero .vimrc paraque se apliquen a todos los documentos que editemos, o cambiarlas en cualquiermomento en modo comando.

    gg Ir a la primera lnea del documento (equivale a 1G)G Sin nmero delante, G nos lleva a la ltima lnea del documento: % Nos lleva a un porcentaje concreto del fichero. Por ejemplo 50 % nos lleva a

    la mitad del fichero, y 95 %, casi al final del mismo.CTRL+F Scrollea una pantalla completa hacia adelanta (F de Forward).CTRL+B Scrollea una pantalla completa hacia atrs (B de Backward).CTRL+E Scrollea la pantalla en una sla lnea hacia arriba.CTRL+Y Scrollea la pantalla en una sla lnea hacia abajo.CTRL+U Scrollea media pantalla de texto hacia abajo (el equivalente a hacer medio Re-

    Pg). Puede sonar raro el hecho de scrollear medias pantallas, pero en deter-minadas situaciones puede ser til (si no queremos perder vista texto ya ledocuando avanzamos, por ejemplo).

    CTRL+D Scrollea media pantalla de texto hacia arriba (como hacer medio AvPg).zz Sin modificar la posicin actual del cursor, modifica la ventana de visualizacin

    del fichero de forma que la lnea actual acabe centrada en pantalla y podamosver el contexto. Por ejemplo, supongamos que estamos en la parte de abajo dela pantalla con el cursor en la ltima lnea y necesitamos ver con facilidad yclaridad qu lneas hay sobre y bajo ella. En otros editores usaramos la tecla deAbajo hasta centrar un poco la lnea en pantalla y luego subiramos hacia arribapara volver a la lnea en que estbamos. En Vim basta con pulsar zz para centrarla lnea actual en pantalla sin mover la posicin del cursor para nada.

    zt Igual que zz pero posicionando la lnea en la parte superior de la pantalla (tviene de top) lo que nos permite ver con claridad la lnea actual y muchas lneasposteriores.

    zb Igual que zt, pero posicionando la lnea en la ltima posicin de la ventana depantalla, lo que nos permite ver la lnea actual y muchas lneas anteriores. Enambos 3 comandos no se modifica la posicin del cursor en el documento, slola manera de verlo en pantalla.

    De nuevo podemos utilizar multiplicadores en todos los comandos anteriores para evitarnos pulsacionesinnecesarias de teclas:

    Comando Significado20w Avanzar 20 palabras

  • CAPTULO 2. FUNCIONAMIENTO BSICO DE VIM 11

    Comando Significado3fx Avanzar el cursor a la tercera aparicin de la letra x en la lnea actual, desde la

    posicin del cursor.

    Por ltimo, respecto a comandos de movimiento, existen 3 comandos muy especiales que nos permitenposicionarn el cursor al principio, medio y final de la pantalla. Ojo, no principio, medio y final del fichero,sino de la pantalla, de lo que vemos en nuestro monitor:

    Comando SignificadoH Posiciona el cursor al principio de la pantalla (sin hacer scroll de ella).M Posiciona el cursor en el centro de la pantalla.L Posiciona el cursor en la parte baja de la pantalla.

    Ntese lo til que puede ser los comandos W y B para moverse a derecha e izquierda en un prrafopalabra a palabra, a una velocidad mucho ms rpida que utilizando los cursores. Y adems podemosagregar multiplicadores, de modo que 6w nos mover el cursor 6 palabras a la derecha, que puede equivalera ahorrarse 40-50 pulsaciones de cursor o levantar la mano del teclado para llevarla al ratn.

    2.6. La manipulacin del fichero (abrir, guardar, salir)

    Los comandos bsicos a la hora de editar ficheros son:

    Comando Significado:w Grabar los cambios del fichero actual.:w nombre Grabar el contenido actual del buffer en un fichero de nombre nombre.:q! Salir del editor sin grabar ningn cambio en el fichero actual (descartando cual-

    quier cosa que hayamos hecho desde su apertura o ltima vez que grabamos).ZZ Salir del editor grabando los cambios en el fichero actual. Tambin sirve :x o

    :wq!CTRL+G Obtener informacin en la barra de estado del nombre del fichero que estamos

    editando, lnea actual, nmero de lneas, en qu porcentaje del fichero estamos,y nmero de columna.

    2.7. Qu sabemos hacer hasta ahoraBueno, soy consciente de que hasta ahora hemos visto mucho. Muchos atajos de teclado (mejor dicho,muchos comandos), y muchas definiciones. Pero el tiempo que lleva aprenderlas (que es poco si se aprendecon el uso y mediante pruebas en un fichero de texto) es ridculo si lo comparamos con el tiempo que nosahorrar a la hora de editar ficheros, sobre todo si programamos o escribimos muchos textos.

    Hemos aprendido a insertar texto, los comandos ms relevantes de modo comando, y cmo movernos demanera eficiente por el fichero, material suficiente para poder editar ficheros mucho mejor que cuandoejecutamos vim por primera vez :-) .En el prximo captulo vamos a ver opciones ms avanzadas de edicin en Vim, como algunos comandosespeciales y operadores de repeticin. Antes de pasar a l es el momento de probar todo lo visto e intentarentenderlo usando un fichero de texto de ejemplo.

  • Captulo 3

    Ms sobre cambios

    Una vez hemos digerido lo bsico sobre Vim (bsico pero que ya nos permite hacer gran cantidad de cosas),vamos a ver ms opciones de edicin con respecto a la modificacin del texto.

    3.1. Modo reemplazar

    Si estando en modo insercin pulsamos la tecla INSERT, pasaremos a modo REEMPLAZAR, donde eltexto que introduzcamos modificar el texto bajo el cursor en lugar de aadirlo o insertarlo. PulsandoINSERT de nuevo volveremos a modo insercin (en realidad, INSERT sirve para conmutar entre ambosmodos), y pulsando ESC volveremos a modo comando.

    Si en modo comando queremos reemplazar un slo carcter, podemos hacerlo mediante el comando r.Nos posicionamos sobre el carcter que queremos modificar, pulsamos r seguido del carcter correcto,y cambiaremos el carcter bajo el cursor por aquel que hemos tecleado tras la r. Por ejemplo, ra reem-plazar el cracter bajo el cursor por una a, sin salir del modo comando. Es ligeramente ms rpido quepasar a modo insercin, borrar el carcter, introducir el nuevo y pulsar ESC para volver a modo comando.Obviamente, podemos aplicar modificadores para repetir el comando ms veces. De esta forma, 10racambiar los 10 carcteres a partir de la posicin actual del cursor por carcteres a.

    3.2. Operadores

    Existen una serie de comandos en Vim que se comportan como operadores, actuando sobre los comandosde movimiento. Por ejemplo, el operador de borrado d (delete), se puede anteponer a comandos de Vimpara modificar su comportamiento.

    As, si el comando w se mueve hasta la siguiente palabra, el comando dw, borra desde la posicin delcursor hasta el final la palabra actual y se mueve hasta la siguiente palabra (recordemos que podramosutilizar dW para borrar la palabra completa hasta el siguiente espacio sin contar separadores especiales).De igual forma, 4dw realiza 4 veces dw, es decir, borra 4 palabras. Ntese que adems de 4dw tam-bin podramos haber escrito d4w, que hubiera tenido el mismo efecto. Resumiendo, los 2 comandossiguientes son 2 formas diferentes de hacer lo mismo:

    12

  • CAPTULO 3. MS SOBRE CAMBIOS 13

    4dw Repetir 4 veces dw, es decir, borrar 4 palabras.

    d4w Borrar el resultado de 4w, es decir, borrar el resultado de moverse 4 palabras.

    As, si el comando $ nos mueve hasta el final de la lnea actual, el comando d$ borra desde la posicinactual del cursor hasta el final de la lnea. O, por ejemplo, si el comando 100G nos lleva a la lnea 100, elcomando d100G borra desde la lnea actual hasta la lnea 100. Del mismo modo, podemos utilizar dbo DB para borrar la palabra a la izquierda del cursor, o d^ para borra desde la posicin actual hasta elprincipio de la lnea.

    Otro operador interesante es c. El operador c significa cambio. Se comporta exctamente igual qued, pero al acabar pone el cursor en modo insercin. El sentido es el siguiente: si con dw (o dW)borramos la palabra actual, con cw hacemos lo mismo pero adems se pone el editor en modo insercinpara que introduzcamos texto, lo que efectivamente resulta en que hemos cambiado la palabra actual. Sele pueden aplicar los mismos modificadores y opciones (como 4cw, c100G, etc). El equivalente decambio de dd (borrar lnea completa) es cc (cambiar lnea completa).

    Como algunos modificaciones y operadores se utilizan tanto, Vim nos proporciona unos atajos de unasola letra para ejecutarlos:

    Atajo Equivalente Significadox dl Borrar el carcter bajo el cursor.X dh Borrar el carcter a la izquierda del cursor.D d$ Borrar hasta el final de la lnea.C c$ Cambiar hasta el final de la lnea.s cl Cambiar un carcter.S cc Cambiar la lnea completa.

    Gracias a la potencia de Vim, entre operadores y multiplicadores podemos hacer la edicin muchsimo msrpida. Veamos algunos de los comandos utilizados de forma ms frecuente, aparte de los vistos en la tablaanterior:

    Comando Significadodw Borrar desde el cursor hasta el final de la palabra actual. Por ejemplo, si estamos

    encima de la letra m de la palabra automvil, ejecutando dw quedara tan slola palabra auto. Recuerda que w avanza hasta el siguiente separador de palabray W hasta el siguiente espacio entre palabras, de modo que tambin podemos usardW si es lo que nos interesa.

    db Borrar desde el cursor hasta el principio de la palabra actual. Por ejemplo, si estamosencima de la letra m de la palabra automvil, ejecutando db quedara tan slola palabra mvil.

    diw Borrar la palabra bajo el cursor (completa), desde su principio hasta su final.daw Borrar la palabra bajo el cursor, igual que diw, pero en este caso si existe un espacio

    tras la palabra tambin lo borra.dis Borrar la frase (no lnea, sino frase hasta el prximo punto) sobre la que est el cursor.das Igual que dis, pero si existe un espacio tras la frase tambin lo elimina.dG Borrar desde la posicin actual del cursor hasta el final del fichero.dgg Borrar desde la posicin actual del cursor hasta el principio del fichero.

    Cambiando la letra d por una c, los comandos anteriores se transforman en comandos de cambio,pasando a modo insercin tras ser ejecutados.

  • CAPTULO 3. MS SOBRE CAMBIOS 14

    Quiero hacer notar en este punto la diferencia entre dw y daw o diw. Soy consciente de que habrgente que en este punto dir bueno, yo para borrar una palabra no me voy a aprender un comando,para eso la borro a mano. As pens yo tambin al leer por primera vez el manual. Lo que ocurre despuses que las primeras semanas que usas Vim, para borrar una palabra entras en modo edicin y usas Supr ola tecla de borrar. Pasado un tiempo, te das cuenta de lo cmodo que es usar x directamente en modocomando (pudiendo deshacer cualquier cosa con u). En algn momento tras algo ms de tiempo, usarsdw y borrars la palabra completa, y finalmente cuando te sientes ante cualquier otro editor te sentirastotalmente limitado de no poder hacer un 4dw para borrar cuatro palabras de golpe.

    3.3. Otros comandos especiales

    Hemos dejado para el final 4 comandos especialmente interesantes y tiles en la edicin con Vim.

    3.3.1. El comando punto .

    Este comando sirve para repetir el ltimo comando que haya producido un cambio en el documento. Esdecir, si lo ltimo que ejecutamos fue un comando dd (borrar lnea), con el comando . lo repetimos. Sifue un comando dw (borrar palabra), con el punto repetimos la ejecucin (pero esta vez sobre la palabraactual).

    Veamos un pequeo ejemplo de su utilidad (extrado de manual de Vim). Supongamos que queremosreemplazar una serie de palabras en el texto que son incorrectas. En un par de prrafos queremos cambiarcuatro por cinco. Gracias al operador punto podramos realizar lo siguiente:

    /cuatrocwcinco

    Con esto buscaramos la palabra cuatro (barra = buscar), y con cwcinco, borraramos la palabra e intro-duciramos el texto cinco. El ESC final es para volver a modo comando tras borrar la palabra con cw (quenos deja en modo insercin) y escribir cinco.

    Si quisieramos reemplazar alguna otra ocurrencia de cuatro por cinco (sin hacer un reemplazo global, queya veremos cmo se hace), podramos ahora hacerlo con:

    n

    .

    n

    .

    (etc...)

    Es decir, pulsamos n para buscar la siguiente aparicin de cuatro en el texto, y pulsamos . paraejecutar de nuevo el ltimo cambio, que es cwcinco. Con esto avanzamos a la siguiente aparicinde cuatro y lo reemplazamos con cw por cinco, y podemos repetir de nuevo el proceso de n y .para volver a hacer lo mismo.

    El operador punto es extremadamente til, y podemos verlo con otro ejemplo (tambin del manual de Vim).Supongamos que estamos editando HTML y queremos borrar algunas imgenes de la pgina (no todas,

  • CAPTULO 3. MS SOBRE CAMBIOS 15

    slo algunas). Habra que buscar algunos y borrarlos. Supongamos quebuscamos con / la cadena /que encuentres.

    Pues bien, una vez borrado este primer tag IMG con 2 simples comandos (buscar y borrar), si pulsamosn nos iremos al siguiente tag img . Si nos interesa borrar ese tag que hemos encontrado, le damos alpunto ., y repetimos la ltima operacin anterior que modifica el documento, es decir, el df sinodos, y df> slo borrara hasta el primero:

    texto del enlace

    En este caso slo tenemos que aprovecharnos de los multiplicadores: Si no estamos buscando el primersmbolo >, sino en segundo, todo se reduce a:

    /

    Es decir, en lugar de borrar el resultado de f> ejecutamos el borrado de 2f>, que es repetir 2 veces elf> con lo que encontramos el segundo cierre de tag.

    Pensad por un momento la diferencia entre un editor convencional y vim con lo que hemos visto hastaahora. Alguien podra pensar es que es complicado tanto comando. Piensa que no los aprendes de me-moria, sino con el uso (y casi por lgica, por ejemplo, dw = delete word). Ahora supn que programasen HTML. Usas un editor muy muy bonito que tiene todo tipo de menes que insertan de todo. O mejoran, es WYSIWYG, y quieres borrar ciertos enlaces, pero no todos. Realizas una bsqueda y vas uno a unoseleccionando con el ratn o los cursores y borrando? Qu tal dos simples comandos como los que hemosvisto en el prrafo anterior seguidos de n y .? Qu hay de la enorme cantidad de tiempo que pode-mos ahorrar programando, editando pginas HTML o escribiendo textos con Vim? Vale la pena reflexionarsobre ello.

    3.3.2. El comando ~

    Este comando (que en los teclados espaoles se introduce pulsando AltGr + 4, al menos en Linux), simple-mente cambia el caso (entre maysculas y minsculas) del carcter bajo el cursor, y avanza al siguientecarcter. Tambin se puede utilizar sobre texto seleccionado (hablaremos en un posterior captulo sobreseleccionar texto, copiar y pegar) para cambiar el caso de la seleccin completa.

  • CAPTULO 3. MS SOBRE CAMBIOS 16

    3.3.3. Los comandos I y A

    El comando i mayscula, es equivalente al i minscula, es decir, pasa a modo insercin, pero lo haceposicionando el cursor en el primer carcter de la lnea que no sea un espacio en blanco. Es decir, si estamoseditando cdigo en C y queremos modificar una sentencia que tiene varios espacios (de indentado) delante,pulsando I nos pasamos a modo insercin directamente en la primera letra de la sentencia.

    El comando a mayscula, por contra, entra en modo insercin pero lo hace moviendo el cursor al finalde la lnea, para aadir datos a la lnea actual.

  • Captulo 4

    Bsquedas

    Ahora que ya nos manejamos en la insercin y modificacin de texto toca tratar el tema de las bsquedasde texto. Buscar texto en un editor de textos significa que queremos llevar el cursor desde la palabra en queestemos hacia la primera ocurrencia de una determinada cadena de texto o palabra que est por debajo denuestra posicin actual cuando buscamos hacia adelante, y por encima de nuestra posicio actual cuandobuscamos hacia atrs.

    En Vim existen 2 comandos especficos para buscar hacia adelante y hacia atrs en el documento:

    Comando Resultado/CADENA Buscar la primera apacin de CADENA por debajo de la posicin actual

    del cursor (bsqueda hacia adelante). La barra / es la que aparece sobrela tecla 7 del teclado (no la barra inversa), y que se introduce medianteSHIFT+7.

    ?CADENA Buscar la primera aparicin de CADENA por encima de la posicin actualdel cursor (bsqueda hacia atrs).

    As, si ejecutamos el comando /prueba, el cursor se posicionar en la primera ocurrencia de prueba enel texto que aparezca tras la posicin actual del cursor, mientras que si utilizamos el comando ?pruebaestaremos buscando hacia arriba en el documento.

    Una vez realizamos una bsqueda, podemos repetir la misma utilizando los comandos n y N, de forma que:

    Comando Significadon Buscar la siguiente aparicin de la cadena hacia adelante (sin tener que

    repetir el comando /CADENA).N Buscar la anterior aparicin de la cadena hacia atrs (sin tener que repetir

    el comando ?CADENA).

    Una cosa muy interesante de las bsquedas en Vim es que tenemos un historial de las mismas. Si hemosejecutado varios comandos de bsqueda, si tecleamos la / en modo comando y usamos los cursores arribay abajo, podemos acceder a las ltimas bsquedas realizadas, y volver a ejecutarlas pulsando Enter. Siadems de escribir la / aadimos algn carcter ms antes de pulsar arriba o abajo, los cursores sloharn historial entre aquellas bsquedas que comiencen exactamente por los caracteres que hemos intro-

    17

  • CAPTULO 4. BSQUEDAS 18

    ducido. Como un ejemplo, supongamos que mientras editabamos un fichero hemos realizado las siguientesbsquedas:

    /casa/camin/moto

    Si pulsamos / y usamos la tecla de cursor arriba varias veces, iremos scrolleando entre /moto, /camin y/casa. Por contra, si hubieramos tecleado /ca antes de pulsar arriba, slo se nos ofreceran las opciones de/camin y /casa. De esta forma, repetir bsquedas anteriores largas o complejas es muy sencillo, no comoen otros editores que slo recuerdan la ltima bsqueda realizada.

    Cabe decir que no slo las bsquedas tienen un historial: los comandos que comienzan por el carcter :tambin tienen su propio historial que se maneja con los cursores arriba y abajo, y que es independientedel de bsquedas. Es ms, Vim se acordar de la ltima bsqueda o comando : realizado en una sesinanterior de vim (por ejemplo, una bsqueda que realizamos ayer!).

    Existe otra manera sencilla de realizar bsquedas sin tener que teclear prcticamente nada:

    Comando Significado* Realizar una bsqueda hacia adelante de la palabra sobre la cual est el

    cursor.

    # Realizar una bsqueda hacia atrs de la palabra sobre la cual est el cursor.

    4.1. Maysculas y minsculas

    Vim distingue las maysculas de las minsculas al realizar bsquedas. Si estamos buscando la palabra ca-sa pero en el texto aparece como Casa, Vim no encontrar esa ocurrencia. Al igual que en otros editoresy procesadores de texto, podemos decirle a Vim que ignore si las letras son maysculas o mnusculas enlas bsquedas:

    :set ignorecase Para que se ignoren las diferencias entre maysculas y minsculas.

    :set_noignorecase Para que no se ignoren las diferencias entre letras.

    4.2. Resaltado de las bsquedas

    Cuando realizamos la bsqueda de una palabra, podemos hacer que los resultados de la bsqueda quedaresaltados en un color diferente o no. Esto se hace mediante los siguientes comandos:

    :set hlsearch Todas las ocurrencias de la bsqueda se resaltan.

    :set nohlsearch Desactivar el modo de resaltado de ocurrencias.

    :nohlsearch Desactivar el resaltado de ocurrencias para la ltima bsqueda (pero no para las prximasque se hagan).

  • CAPTULO 4. BSQUEDAS 19

    Asmismo, otras 2 opciones interesantes son:

    :set incsearch Bsqueda incremental: Vim ir buscando cadenas conforme la vayamos tecleando (puedesernos interesante).

    :set nowrapscan Cuando Vim busca, si llega al final del fichero contina por el principio (y viceversa enbsquedas hacia arriba). Con esta opcin le decimos a Vim que cuando llegue al final o principio delfichero pare la bsqueda.

    Si alguna de estas opciones nos parece interesante como opcin por defecto la podemos aadir a nues-tro .vimrc personal. Por ejemplo, si nos gusta que todas las bsquedas sean resaltadas e incrementales,editamos nuestro .vimrc y le aadimos:

    set hlsearchset incsearch

    Ntese como en el fichero .vimrc no es necesario poner los dos puntos : antes del set.

    4.3. Expresiones regulares

    Es cierto que cuando utilizamos la bsqueda con la barra o el interrogante (/ o ?) basta con escribir unapalabra o frase para buscarla en el texto, pero la realidad es que Vim nos ofrece mucho ms. La cadenade bsqueda que le podemos pasar a Vim es en realidad una expresin regular, es decir, permite queespecifiquemos en la cadena ciertas expresiones con un significado especial diferente del literal que hemosescrito.

    Por ejemplo, cuando utilizamos el carcter punto (. ) en una cadena bsqueda (como por ejemplo /cas.), para Vim dicho carcter tiene un significado especial, que en este caso es cualquier carcter. As,buscando /cas. (barra, c, a, s, punto), vim encontrar ocurrencias como casa, caso, case, etc. Esdecir, el punto es un comodn que significa cualquier carcter. Esto nos da mucho juego a la hora debuscar palabras determinadas en el texto si no sabemos exctamente que puede haber en una posicinconcreta de la palabra. Obviamente, podemos poner ms de un punto en nuestra expresin regular.

    Veamos otro ejemplo: los caracteres ^ y $, que significan principio de lnea y fin de lnea respec-tivamente. Segn la bsqueda que realicemos obtendremos los siguientes resultados:

    Bsqueda Resultado/^vaca Vim encontrar todas aquellas palabras que comiencen por vaca y que estn al

    principio de la lnea. Literalmente le hemos dicho a Vim que busque una cadena quesea principio de lnea seguido de la palabra vaca.

    /vaca$ Vim encontrar todas aquellas palabras que contengan la cadena vaca seguida de unfin de lnea. Es decir. encontrara vaca o Caravaca si alguna de ellas es la ltimapalabra de la lnea.

    /^vaca$ Vim encontrar slo ocurrencias en lneas que slo contengan la palabra vaca. Esdecir, una lnea que sea principio de lnea, vaca, fin de lnea.

    Como puede verse, ^ y $ son muy tiles a la hora de hacer bsquedas.

  • CAPTULO 4. BSQUEDAS 20

    4.3.1. Caracteres especiales a escapar

    Debido a que lo que buscamos son expresiones regulares y no simples cadenas, hay caracteres que tienenun significado especial y que no pueden ser buscados directamente. Por ejemplo, el carcter $ significafin de lnea, y si ejecutamos /$, no encontraremos la primera ocurrencia del carcter $ sino que nosposicionar el cursor en el primer fin de lnea a partir de la posicin actual del cursor.

    Si queremos realizar bsquedas que incluyan caracteres especiales tenemos que escaparlos con la barrainversa (\), que para Vim es un indicador de el prximo carcter que voy a introducir interprtalo comoun caracter normal y no como un carcter especial.

    As, para buscar la cadena Yo tengo 1$ en el banco hacia adelante en Vim, ejecutaremos:

    /Yo tengo 1\$ en el banco

    Del mismo modo, si necesitamos buscar la cadena /prueba. pero no queremos que Vim encuentre /prue-bas (recordad que el punto es un carcter especial que se sustituye por cualquier carcter a la hora debuscar), sino que queremos, literalmente, encontrar las apariciones de la cadena prueba seguida de unpunto, debemos escapar el punto, mediante: /prueba\. (barra prueba barra_inversa punto). La barra in-versa le quita al punto el significado especial y Vim entiende que debe buscar el carcter punto.

    Los caracteres especiales son los siguientes: .*[]^/\?~$. Explicar expresiones regulares a fondo quedafuera del mbito de este documento (donde slo tratamos lo bsico para trabajar con Vim), pero puedesaprender mucho ms sobre el tema en Internet mediante cualquier buscador (por ejemplo, buscando enGoogle por vim regular expressions, en condiciones normales os debe llevar a pginas que tratan lasexpresiones regulares en Vim con ms detalle).

    4.3.2. Bsqueda de palabras completas

    En ocasiones cuando realizamos bsquedas nos interesa encontrar palabras completas y no porciones depalabras. Por ejemplo, si buscamos casa, nos interesar encontrar vaca, pero no vacaciones o Ca-ravaca. En ese caso podemos hacer uso de los identificadores de inicio y fin de palabra en las expresionesregulares de Vim, que son \respectivamente (barra inversa seguida del smbolo de menor que parainicio de palabra, y barra inversa seguida del smbolo de mayor que para fin de palabra)

    As, si en un texto tenemos las 3 palabras anteriores, segn la bsqueda que realicemos obtendremos unosu otros resultados:

    Bsqueda Resultado/vaca Encontraremos las 3 palabras: vaca, vacaciones y Caravaca./\ Encontraremos aquellas palabras que acaben en vaca, como vaca y Caravaca./\ Encontraremos slo la palabra vaca.

    Para Vim, los smbolos \se corresponden con aquellos caracteres que comienzan o acaban una palabra,como espacios, retornos de carros, comas, puntos y comas o puntos.

  • CAPTULO 4. BSQUEDAS 21

    4.4. Sustituir (reemplazar) cadenas en el texto

    Otra de las operaciones bsicas de bsqueda es el reemplazo de cadenas, es decir, cambiar en todo el fichero(o en una parte del mismo) una cadena por otra. Esto se hace con el comando de sustitucin :s.

    Por ejemplo, para cambiar todas las apariciones de la cadena hola por adios, haremos:

    :%s/hola/adios/g

    Este comando viene a decirle a Vim que sustituya (s), en todo el fichero ( %), la cadena hola por adios,y que si en una lnea encuentra ms de una aparicin de hola, que cambie todas (g). Si quitamos la g,slo cambiaremos la primera aparicin de hola en cada frase.

    Recordad que en el caso de usar expresiones regulares tendremos que escapar ciertos caracteres especiales,como los puntos, las barras, etc. Por ejemplo:

    :%s/hola\.hola/adios\.adios/g

    Pero no estamos obligados a trabajar con la totalidad de un fichero, podemos realizar sustituciones tambinen bloques del fichero. Por ejemplo, supongamos que entramos en modo visual (v) y seleccionamos unbloque de texto. Mientras est seleccionado pulsamos : (dos puntos) y tecleamos:

    s/hola/adios/g

    En pantalla aparecer:

    :s/hola/adios/g

    Y el resultado efectivo de la sustitucin ser que slo reemplazaremos la cadena hola por adios en eltexto seleccionado.

    Tambin podemos aplicar slo la sustitucin a las lneas situadas entre 2 lneas dadas. Si por ejemploqueremos cambiar todas las apariciones de hola entre la lnea 100 y la lnea 200, podemos hacerlotecleando:

    :100,200s/hola/adios/g

    La sintaxis general es:

    :n,Ncomando

    Como ya hemos visto, utilizar : % equivale a poner un rango de lneas entre 1 y el mximo de lneas delfichero.

  • Captulo 5

    Marcas en el texto

    Vim tiene una funcionalidad bastante til conocida como marcas, que consiste en que podemos establecerhasta 26 marcas (desde la a hasta la z) en el texto para volver a esa posicin del texto en cualquier momento.Estas marcas son invisibles, y son simplemente una referencia para nosotros.

    Por ejemplo, supongamos que estamos programando y estamos modificando el bucle principal de nuestroprograma, pero estamos cambiando bastante a otra funcin que tambin estamos modificando. Cuandotenemos que ir de una parte del documento a otra constntemente es bastante molesto, sobre todo con loseditores convencionales, donde se hace todo a base de barra de scroll o bien de RePg/AvPg y cursores.Estar todo el rato hacia arriba y hacia abajo slo porque tenemos que movernos entre 2 porciones deldocumento no es algo especialmente agradable ni cmodo.

    En Vim, hasta ahora tenemos la opcin de activar los nmeros de lnea (:set number), mirar y recordar los2 nmeros de lnea en que estn las 2 partes del documento entre las que vamos a ir cambiando, y cambiarentre ellos con el comando G (por ejemplo, alternar entre 100G y 500G). Es cierto que estoes muchsimo ms cmodo que moverse mediante teclas de movimiento, pero Vim an puede ir ms allgracias a las marcas.

    Simplemente basta con poner 2 marcas (invisibles, recordemos) en esos 2 puntos del documento, y po-dremos alternar entre ellos sin ninguna dificultad. No es que podamos alternar, es que podemos seguirmovindonos libremente por el documento e ir a cualquiera de los dos puntos en cualquier momento.

    5.1. Establecer y recuperar marcas

    En Vim las marcas se ponen con el comando m seguido de una letra minscula (a-z) identificador de lamarca. As, cuando estamos en una parte concreta del documento que nos interesa, pulsamos ma (letram, letra a), y establecemos una marca en la lnea actual del documento que se llamar ma. Del mismomodo, nos podemos ir a la segunda parte del documento que vamos a frecuentar y establecer una marcacon mb (recordad que tenis disponibles 26 marcas, de la a a la z).

    Ahora podemos ir a cualquiera de esas 2 marcas de forma inmediata con el comando (comilla simple, laque est a la derecha del cero en los teclados espaoles) seguido de la letra de la marca a la que queremosir. Por ejemplo, pulsando a iremos al principio de la lnea que marcamos con ma y pulsando b iremosal principio de la lnea que marcamos con mb. Se os ocurre alguna manera ms cmoda de moverseentre 2 partes diferentes del documento?

    22

  • CAPTULO 5. MARCAS EN EL TEXTO 23

    Si eres programador no hay nada ms til: una marca en el main(), otra en el bloque en que estamostrabajando, y otra por ejemplo en una funcin a la que estamos yendo mucho para hacer cambios, y seacab el moverse con las teclas de movimiento de un sitio para otro.

    Y si no eres programador, tambin: puedes poner una marca al principio del fichero y otra al final: pulsasgg para ir al principio del fichero, pulsas mi (la i de inicio, para que sea fcil de recordar), pulsas Gpara ir al final del fichero, pulsas mf (la f de fin), y ya tienes 2 marcas de forma que desde cualquierpunto del documento puedes ir al principio o final del fichero usando marcas. O, por ejemplo, si estamosescribiendo algo y necesitamos ir a otro punto del documento a consultar algo, podemos poner una marcay desplazarmos, para despus volver de forma inmediata recuperando la marca. Las posibilidades soninfinitas.

    Hemos dicho que la comilla simple nos devuelve a una marca posicionando el cursor al principio de lalnea. Vim permite mucho ms, ya que el comando (comilla inversa, la tecla que tenemos a la derecha dela p en los teclados espaoles) seguido de la letra de la marca a la que ir nos devuelve exactamente a lalnea y columna en la que realizamos la marca con el comando m: no slo a la misma lnea, sino en lamisma posicin exacta del cursor.

    5.2. Marcas especiales

    Cabe destacar que si nos olvidamos de las marcas que hemos puesto, podemos obtener un listado de marcasejecutando el comando :marks seguido de Enter. Al visualizar este listado veremos que hay una serie demarcas especiales que no hemos definido nosotros, y que son:

    Marca Significado

    (comilla simple)Posicin del cursor en el momento en que realizamos el ltimo salto quehayamos hecho.

    (comillas dobles)Posicin del cursor la ltima vez que editamos el fichero. Esto quiere decirque cuando abrimos un fichero, yendo a la marca comillas dobles me-diante comilla simple seguido de comilla doble nos posicionaremos en ellugar en que estbamos la ltima vez que editamos este fichero. Esto esespecialmente til a la hora de programar.

    [(corchete abierto)

    Posicin del principio del ltimo cambio que hayamos realizado.

    ](corchete cerrado)

    Posicin final del ltimo cambio que hayamos realizado.

    Merecen mencin especial las 2 primeras marcas especiales de la tabla.

    La comilla simple permite volver a la posicin del ltimo salto, y esto incluye los saltos realizados conG y gg. Es decir, si estamos en una posicin del documento y hacemos 100G para ir a la lnea 100,pulsando comilla simple seguido de comilla simple de nuevo (es decir: ) volveremos a la posicin en queestbamos antes de realizar el cambio de lnea. Por si fuera poco, las dos comillas simples tambin nospermitirn volver al punto original del salto en el caso de bsquedas, por ejemplo.

    Vim guarda un historial de saltos, al cual contribuyen las bsquedas, las marcas y los cambios de lnea, ypodemos movernos por ese historial mediante CTRL+O (anterior) y CTRL+I (siguiente). Esto quiere decir,que podemos circular entre todas las posiciones del documento entre las que hemos saltado o buscadomediante estas 2 teclas. Yo personalmente tengo bastante con el uso de marcas y no suelo necesitar usaresta pila de saltos, pero es una posibilidad ms que Vim nos ofrece.

  • CAPTULO 5. MARCAS EN EL TEXTO 24

    Por ltimo, las comillas dobles guardan la ltima posicin en que estabamos la ltima vez que editamosel fichero: por ejemplo, si programamos y solemos salir del editor para compilar, tal vez al terminar dehacerlo nos interese recuperar la edicin del fichero en el punto exacto en que estbamos y no al principiodel mismo. Con la marca de comillas dobles podemos hacer esto fcilmente.

    Si queremos que automticamente se posicione el cursor en el lugar en que editamos el fichero por ltimavez sin necesidad de que nosotros lo hagamos manualmente podemos incluir las siguientes opciones ennuestro fichero .vimrc:

    autocmd BufReadPost *\ if line("\"") > 0 && line("\"")

  • Captulo 6

    Copiar y pegar

    Cuando borramos texto (con dd, dw, x o similares), dicho texto (lneas, palabras o incluso un simplecarcter) se almacena en un buffer interno. Digamos que no se borra sino que se corta. Podemos pegarel ltimo texto borrado utilizando el comando p. Esta es la primera leccin de este captulo: p = paste= pegar. Cabe destacar que una lnea cortada con dd, al ser pegada con p ser insertada debajo de lalnea actual del cursor. Si lo que pegamos no es una lnea completa sino una porcin de texto, entonces serinsertado a la derecha de la posicin actual del cursor.

    Existe una variante de p que es P, cuya diferencia es que pega el texto a la izquierda de la posicinactual del cursor para porciones de texto, o en la lnea sobre el cursor para lneas completas.

    Como siempre, podemos aprovechar los multiplicadores para ahorrarnos trabajo: Con dd podemos cortaruna lnea y con, por ejemplo, 10p podemos pegar 10 copias de la linea cortada.

    En general, dd y p (para una sla lnea) o dd y p (para mltiples lneas) pueden serutilizados para mover bloques de texto de un lugar a otro (copindolos y pegndolos).

    6.1. Seleccionar: el modo visual

    Aparte de poder pegar texto cortado con comandos, en Vim podemos seleccionar texto al estilo de loque se puede hacer en otros editores. Si pulsamos la tecla v pasaremos a modo visual, donde con loscursores (o las teclas de movimiento de vim) extendemos el rea de seleccin para despus operar conella. Nos posicionamos en la primera letra de lo que queremos seleccionar (o la ltima), y usamos arriba,abajo, izquierda y derecha para hacerlo, y podemos cancelar la seleccin en cualquier momento pulsandoESCAPE.

    Existen 2 variantes ms del modo visual para seleccionar texto: la primera es V (v mayscula), quetrabaja slo con seleccin de lneas completas (usando las teclas de arriba y abajo). Es decir, si pulsamosv (minscula) en medio de una frase, podremos mover la seleccin a derecha o izquierda para cogerpalabras sueltas (y tambin frases con arriba y abajo), mientras que V (mayscula) slo trabaja confrases completas.

    La segunda variante son las selecciones de bloques o selecciones verticales. Supongamos que tenemos unatabla como la siguiente:

    25

  • CAPTULO 6. COPIAR Y PEGAR 26

    Nombre Telefono DireccionJuan 12345112 C/. BrasaPepe 78678112 C/. NadaAndres 87894563 C/. Casa

    Pues bien, si quisieramos borrar la columna telfono completa, en muchos editores que no disponen deselecciones verticales tendramos que ir lnea a lnea borrando Telefono, 12345112, 7867811 y87894563. En Vim podemos hacer una seleccin vertical de un bloque que comprenda justo esa co-lumna y trabajar sobre ella: nos posicionamos sobre la T de Telfono y pulsamos CTRL+V, con lo quepasamos a modo de edicin de bloques. Usando los cursores o las teclas de movimiento seleccionamos lacolumna, y ya podemos trabajar sobre ella.

    Algo muy interesante de cuando estamos en modo visual es que podemos usar las teclas de movimientoespeciales. Si por ejemplo pulsamos w, la seleccin avanza una palabra completa. Si pulsamos as (asentence), la seleccin avanza una frase entera (hasta el prximo punto o separador), y podemos repetir loscomandos que deseemos y combinarlos hasta seleccionar el texto deseado.

    Un pequeo apunte (no muy utilizado) sobre la seleccin de texto: si estamos seleccionando texto y vemosque queremos modificar el INICIO de la seleccin, podemos pulsar o para cambiar entre los 2 lmites dela seleccin y cambiar uno u otro. La versin mayscula, O se utiliza para alternar entre las 4 esquinasde las selecciones verticales de CTRL+V.

    6.2. Copiar, cortar y pegar

    Una vez tenemos el texto seleccionado (de cualquiera de las 3 formas descritas), podemos borrarlo, cortarloy copiarlo. Estando en modo visual, con el texto sobre el que queremos actuar marcado, podemos copiarlopulsando y (de yank) y cortarlo, ya sea con d, x y c. La diferencia entre estos 3 modos de copiar esten que d y x se mantienen en modo comando tras cortar el texto, mientras que c (que recordemosque es modificar), se pasa a modo insercin tras hacerlo. Por supuesto, si nos arrepentimos del cortadopodemos pulsar u (undo) para deshacerlo.

    Recordemos que en cualquier momento podemos volver a pegar un texto copiado o borrado usando p.

    As pues, mediante v, y, d y p se realizan todas las operaciones de seleccin, copiado, borra-do/cortado y pegado, respectivamente.

    En el caso concreto de y, dado que es un operador podemos anteponerlo a otros comandos de Vim. Porejemplo, yw copia una palabra completa, y y5w copia las siguientes 5 palabras completas en el bufferde memoria. Y, para finalizar, igual que ocurre con d y dd, duplicando la y como yy copiamosa memoria la lnea actual completa (sin necesidad de seleccionarla). Utilizando multiplicadores, podemospor ejemplo copiar la lnea actual y 3 ms mediante 4yy.

    6.3. El portapapeles del sistema

    En determinados sistemas existe un portapapeles del sistema que es independiente del que usa Vim inter-namente. Si Vim est compilado para soportar el acceso al portapapeles del sistema podemos copiar cosasen l y pegar cosas desde l. Los comandos son los mismos, y y p, pero anteponiendo unas comillasdobles y un asterisco: *. As, quedara *yy para copiar una lnea completa y *p para pegarla.

  • CAPTULO 6. COPIAR Y PEGAR 27

    6.4. Tuberas (pipes) para filtrar textoCuando tenemos texto seleccionado tanto en modo normal como en modo visual, podemos pasar ese textoa travs de cualquier programa externo para filtrarlo. Por ejemplo, supongamos que tenemos un programaque acepta cualquier texto por entrada estndar y nos saca el texto modificado (ordenado alfabticamente,cifrado, o cualquier otra operacin) por la salida estndar. En ese caso, si queremos manipular un prrafode nuestro fichero podemos seleccionarlo (con v en modo visual, por ejemplo), y mientras est el prrafoseleccionado, pulsamos:

    :!programa

    Por ejemplo, supongamos que queremos utilizar el comando sort de UNIX para ordenar alfabticamentelas diferentes lneas de un prrafo. Seleccionamos el prrafo en cuestin con v y los cursores y pulsamos:

    :!sort

    El texto seleccionado ser enviado al comando sort por entrada estndar y ser reemplazado por la salidade la ejecucin de sort. De la misma forma podemos ordenar alfabticamente el fichero entero, seleccio-nndolo todo:

    1Gv

    gg:!sort

    O, lo que es lo mismo:

    1G = ir a la primera lnea del fichero

    v = ir a modo visual

    gg = llevar al cursor al final del fichero (seleccionando todo el fichero):!sort = pasar el texto seleccionado (todo el fichero) al comando sort, y reemplazarlo por la salida dela ejecucin del mismo.

    O, ms sencillo an:

    :% !sort

    ( % representa a una seleccin del fichero completo)El filtrado (pipe a programa externo) nos permite muchas cosas: cifrar texto (llamando a pgp/gpg), pasrseloa programas externos que lo manipulen, etc.

    Otro ejemplo de uso de los filtros es el formateo y justificacin de texto. Si tenemos instalado el comandopar (un programa de Linux para formatear prrafos), podemos seleccionar texto en modo visual y filtrarloa travs de par mediante, por ejemplo:

    :!par 72

    La salida de par 72 consiste en justificar el texto a 72 columnas, cosa que nos puede ser til en determi-nadas circunstancias de edicin de textos.

  • CAPTULO 6. COPIAR Y PEGAR 28

    6.5. Insertar ficheros y salida de comandos

    Podemos insertar el contenido de un fichero de texto en la posicin actual del cursor mediante el comando:r. Tan slo deberemos especificar el fichero a insertar (con su ruta si es necesario):

    :r fichero

    El comando :r nos permite tambin insertar la salida (el resultado de la ejecucin) de comandos del sis-tema en nuestro documento. Por ejemplo, si queremos insertar la salida del comando uptime en la posicinactual del cursor, pasamos a modo comando (ESC) y ejecutamos:

    :r !uptime

    La diferencia entre este comando y el anterior es el smbolo de admiracin cerrada !, que indica ejecu-cin.

  • Captulo 7

    Coloreado de sintaxis

    Vim soporta coloreado de sintaxis, que quiere decir que puede resaltar con diferentes colores palabrasclaves del fichero que estemos utilizando. As, si estamos programando y Vim tiene instalado un ficherode sintaxis para el lenguaje de programacin que estamos usando, las palabras clave aparecern en uncolor, los literales en otro, los nmeros en otro, etc. Esto clarifica enormemente la edicin de ficheros ypermite encontrar errores ms fcilmente. No slo sirve para programar, porque gran parte de los ficherosde configuracin tpicos de UNIX aparecern tambin con resaltado de sintaxis para evitarnos errores.

    Si nuestra terminal de texto soporta colores y tenemos bien definida la variable $TERM en el sistema,podemos activar el coloreado de sintaxis mediante el comando :syntax on en el editor, o aadiendosyntax on en nuestro .vimrc. Si tras hacer esto el fichero que estamos editando no aparece coloreado,puede ser bien porque Vim no ha sabido determinar el formato del fichero que estamos editando (cosa quele podramos especificar con, por ejemplo, :set filetype=basic en el caso de un fichero en BASIC), otambin puede ser que el fichero que estamos editando sea de un lenguaje o tipo del cual Vim no tiene unadefinicin del lenguaje.

    En mi caso, los ficheros de sintaxis se guardan en /usr/share/vim/syntax, y como podis ver, entiende grancantidad de lenguajes y formatos:

    [sromero@compiler:~]$ ls /usr/share/vim/syntax/ -1 | wc -l409

    Si Vim no entiende el tipo de lenguaje que estamos usando, siempre podemos crear un fichero de sintaxispara l e introducirlo en ese directorio, con lo cual el nuevo lenguaje tendra ya coloreado de sintaxis enVim.

    Pero supongamos que estamos editando algn tipo de programa y fichero de configuracin que Vim sentiende, como por ejemplo, un programa en C, C++, ASM, Pascal, BASIC, o ficheros como el /etc/fstabo el mismo .vimrc (por citar algn ejemplo). En ese caso, en condiciones normales con un :syntax ondeberamos ver el fichero coloreado.

    Si no nos gustan los colores utilizados, podemos cambiarlos en el fichero /usr/share/vim/syntax/syncolor.vim,cuyo formato no es muy complicado aunque no lo trataremos aqu. Basta decir que si por ejemplo queremoscambiar el color de los comentarios de rojo (por ejemplo) a cyan, cambiaremos la lnea:

    SynColor Comment term=bold cterm=NONE ctermfg=DarkRed (etc...)

    29

  • CAPTULO 7. COLOREADO DE SINTAXIS 30

    por

    SynColor Comment term=bold cterm=NONE ctermfg=Cyan (etc...)

    Cabe destacar que Vim tiene 2 juegos de colores diferentes el mismo fichero, segn si la terminar que utili-zamos tiene un fondo clarito o un fondo oscuro. Podemos cambiar el juego de colores utilizados indicandoel tipo de fondo de terminal que usamos, entre :set background=dark y :set background=light.

    7.1. Consideraciones sobre el coloreado

    A veces nos puede dar la impresin de que el coloreado de sintaxis no se realiza bien cuando estamosscrolleando. Esto es as porque Vim, para ahorrar tiempo, no colorea todo el fichero, sino slo lo que vemospor pantalla, y conforme lo vamos viendo. Si el scroll hace alguna palabra especial se corte, Vim puede noentenderla como una palabra clave y no ponerle el color apropiado. Pulsando CTRL+L, que redibuja lapantalla, podemos solucionarlo (si es que llega a sucedernos). En condiciones normales no necesitaremoshacer nada de esto.

    En cualquier momento podemos desactivar el coloreado de sintaxis (:syntax off), o slo deshabilitarlo parael fichero actual (:syntax clear).

    Una de las cosas ms interesantes es que podemos imprimir el estado actual de la pantalla con sus colores,mediante el comando :hardcopy (como mnimo en Windows). Adems, podemos convertir el fichero queestemos editando a un bonito HTML con sus colores de resaltado ejecutando lo siguiente:

    :source /usr/share/vim/syntax/2html.vim:write fichero.html:q!

    El primer comando hace que se convierta el fichero actual a HTML (en una ventana o buffer nueva deVim), el segundo graba este buffer como un fichero aparte, y el tercero cierra el buffer.

    Finalmente, cabe destacar que podemos crear nuestras propias combinaciones de colores (esquemas), mo-dificando fcilmente una existente. Basta con:

    !mkdir ~/.vim/colors!cp /usr/share/vim/colors/morning.vim ~/vim/colors/test.vim

    Editando el fichero test.vim tendremos un nuevo esquema de colores llamado test que podremos cargarcon :colorscheme test.

  • Captulo 8

    El fichero .vimrc

    Ya hemos hablado del fichero .vimrc (o _vimrc en Windows). En l podemos poner nuestras configuracio-nes especficas y concretas, slo para nuestro usuario (o para todos en /etc/vimrc).

    En este tutorial de introduccin a VIM slo vamos a ver algunas opciones tiles e interesantes que podemosdefinir en el fichero .vimrc. En el manual de VIM (y en la gran cantidad de documentacin que tenisdisponible en Internet) podis encontrar muchas ms opciones, variables e incluso ejemplos de cdigo paraprogramar (s, programar) vuestras propias funciones para el editor.

    El fichero .vimrc no slo permite especificar parmetros y opciones de arranque para Vim: es mucho msque eso. En l podis programar en el lenguaje interno propio de Vim (lenguaje de comandos) para realiza-ros vuestras propias funciones, pudiendo hacer cualquier cosa que os podis imaginar: macros, comandos,filtros para el texto, llamadas a programas externos, etc.

    Si queris conocer la totalidad de opciones de Vim y una explicacin de cada una de ellas, podis hacerlomediante la ayuda includa al respecto en Vim, que se despliega tecleando :options (en modo comando).

    8.1. Opciones

    Las opciones que veremos a continuacin para el fichero .vimrc no slo estn pensadas para ser utilizadas enel arranque del editor: podrn ser utilizadas en cualquier momento en modo comando durante la ejecucinde VIM.

    Veamos algunos ejemplos de opciones:

    set nocompatible Aadiendo en nuestro fichero vimrc la opcin set nocompatible, hacemos que VIMnos permita utiliza funciones extras que no estn disponibles en el VI clsico y tradicional. Os reco-miendo que tengis esta opcin definida en el .vimrc. Utilizar set compatible u omitir esta opcinhar que algunas de las mejores funcionalidades de VIM no estn disponibles, para preservar lacompatibilidad con VI.

    set autoindent Esta funcin (tambin puede utilizarse set ai), hace que cuando pulsemos enter en unfichero de texto, la nueva lnea que insertamos sea indentada automticamente (es decir, se insertenespacios al principio de la misma y el cursor se posicione en una determinada posicin). Esto puede

    31

  • CAPTULO 8. EL FICHERO .VIMRC 32

    servir, por ejemplo, para programar: si estamos escribiendo un bloque de cdigo indentado a 3 espa-cios (por ejemplo), al pulsar enter no empezaremos en el primer carcter sino que automticamentese nos situar el cursor en la columna 3. Literalmente, lo que hace VIM es que cuando pulsamosEnter, indenta la nueva lnea a la misma profundidad que la anterior.

    set noai Esta funcin hace lo contrario de set autoindent, es decir, cuando pulsemos Enter iremos di-rectamente al primer carcter de la siguiente lnea. Esta funcin resulta muy til cuando estamoseditando cdigo indentado y queremos, por ejemplo, pegar texto o cdigo desde una seleccin detexto externa (copiar y pegar desde un navegador, otro editor, etc.). Como el texto que pegamos yaest indentado, no necesitamos que Vim lo indente aadiendo espacios. Si lo pegramos tal cual,veramos como la indentacin original sumada a la identacin automtica de Vim hara que no serespetara el indentado real del texto. Para evitar esto, podemos pulsar ESC (pasar a modo comando),y teclear :set noai, y pegar el texto externo (que se pegar bien). Despus podemos volver al modode identacin con ESC y :set ai.

    set backup Si est activada esta opcin, cada vez que grabemos el fichero se almacenar una copia de laversin anterior como fichero~ (con el carcter ~ detrs).

    set nobackup Esto sirve para lo contrario que set backup, es decir, para deshabilitar la generacin deficheros de backup.

    set ruler Con set ruler, VIM muestra la posicin X,Y actual del cursor en la barra de estado.

    set wrap Activa el cortado de lneas largas en pantalla: si tenemos activada esta opcin y una lnea esms larga (de ancho) que lo que podemos ver en nuestra ventana del editor, VIM la partir (visual-mente). Si no la tenemos activada, simplemente slo podremos ver desde el inicio de la lnea hastalo que nos permita la ventana del editor o la terminal (pero no partir la lnea).

    set nowrap Las lneas que no caben en pantalla no sern visualmente partidas (lo contrario de set wrap).set incsearch Habilita la bsqueda incremental: esto implica que cuando hacemos bsquedas con el co-

    mando /, Vim no esperar a que pulsemos ENTER para comenzar la bsqueda. VIM ir buscandolas palabras conforme vayamos tecleando sus diferentes letras.

    set hlsearch Habilita el coloreado de las palabras encontradas en las bsquedas, en un color diferente delcolor del texto.

    set tabstop y set sw Estas 2 opciones permiten definir el tamao (en espacios) de los tabuladores (pordefecto suelen ser 8). Un ejemplo de uso sera set tabstop=3 y set sw=3.

    set expandtap Convertir todos los tabuladores en espacios: ideal para los que, como yo, odiis los tabula-dores y prefiris los espacios para tabular. Junto a las 2 opciones anteriores, cuando pulsis TABno se introducir un carcter tabulador sino el nmero de espacios prefijados.

    set noerrobells Evitar que Vim pite en caso de error.

    syntax on Como ya hemos visto, activa el coloreado de sintaxis (si VIM entiende el formato del ficheroque editamos). La orden que lo desactiva sera syntax off.

    8.2. Sustituciones o Abreviaciones

    Un comando muy til para nuestro .vimrc es el comando de abreviacin o sustitucin. Este comando nospermite definir abreviaturas que despus sern expandidas a sus versiones largas. Por ejemplo, suponga-mos que utilizamos VIM como editor para nuestro cliente de correo o de news y habitualmente tenemosque escribir la direccin de nuestra pgina Web:

  • CAPTULO 8. EL FICHERO .VIMRC 33

    http://pinsa.escomposlinux.org/sromero/

    Pues bien, podemos declarar lo siguiente en nuestro .vimrc:

    iab miweb http://pinsa.escomposlinux.org/sromero/

    Con esto, cuando en cualquier momento tecleemos las letras que componen la palabra miweb seguido deun espacio, automticamente VIM expandir la palabra miweb y la reemplazar por la susodicha URL.El espacio que tecleamos provoca la sustitucin: sin l, podramos seguir tecleando ms letras para poderteclear, por ejemplo, miwebpersonal sin que se produzca dicho reemplazo.As, podemos definirnos muchos y utilsimos aliases o abreviaturas en nuestro .vimrc:

    iab _miweb http://pinsa.escomposlinux.org/sromero/iab _saludos Muchas gracias y saludos.iab _ecol es.comp.os.linux.iab _email [email protected] _linea /*=============================*/

    Si, por ejemplo, cometemos un error muy habitual al teclear, podemos evitarlo con iab:

    iab Saludso Saludos

    De este modo, cuando escribamos Saludso, la palabra ser automticamente corregida, cambiandola porSaludos.

    La cadena hace las veces de retorno de carro y nos permite definir abreviaturas de mltiples lneas:

    iab _firma Santiago RomeroGNU/Linuxsromero arroba gmail.com

    (En este sentido, tambin podemos usar otras cadenas de significado especial, como ).

    Incluso podemos llamar a funciones internas de vim:

    iab _hora =strftime("%H:%M")iab _fecha =strftime("%a%b%d%T%Z%Y")

    Ntese cmo personalmente suelo anteponer un carcter _ a todas mis abreviaturas. Hago esto pa-ra evitar que palabras comunes (hora, fecha) sean expandidas, cuando mi objetivo es simplemente tenerdefinidas abreviaturas como _hora y _fecha.

    Podemos eliminar una abreviatura definida mediante el comando :unabbreviate:

    :unabbreviate _hora

    Si queremos eliminar todas las abreviaturas definidas podemos usar :abclear.

    (Nota: La diferencia entre los comandos ab e iab es que el primero se utiliza para definir abreviaturasde una sla palabra, mientras que con iab, la cadena de sustitucin puede ser de ms de una palabra).

  • CAPTULO 8. EL FICHERO .VIMRC 34

    8.3. Mapeados

    Si os pareci til la opcin iab, el comando map y sus variantes (nmap, imap, vmap) no se quedanatrs: map permite mapear teclas a acciones, de forma que cuando pulsemos una determinada tecla ocombinacin de teclas se ejecuten las acciones correspondientes. Veamos algunos ejemplos para el .vimrc.Comencemos con un ejemplo sencillo: que cada vez que pulsemos la tecla F1 se inserte la cadena pruebaen el texto, mediante la inclusin de lo siguiente en nuestro .vimrc:

    map! iprueba

    Si en modo comando o insercin pulsamos F1, se insertar la cadena prueba dentro del texto. Lo que haceel comando map es sustituir la pulsacin de F1 por la serie de comandos (modo comando),i (pasar a modo insercin), prueba (introducir la cadena prueba) y , para ejecutar el comando(como si pulsramos Enter en la lnea de edicin de comandos de Vim).

    Continemos con el siguiente ejemplo, que mapea a la tecla la insercin de la ejecucin del comandouptime:

    map! :r !uptime

    Y veamos algunos ejemplos ms, para comentar y descomentar cdigo C/C++ con comentarios del tipodoble barra:

    map! ,c ^i//j0imap! ,d ^:.,.s+\(^\s*\)//+\1j0i

    Con estos ejemplos (algo ms elaborados), cuando pulsemos coma seguido de c en modo comando,comentaremos la lnea actual con una doble barra // al principio de la misma. Del mismo modo, ,ddescomentar la lnea actual.

    Ms ejemplos, aprovechando filtros, para mapear CTRL+J a la salida de la ejecucin del comando par,justificando el texto seleccionado (o el prrafo actual) a 70 columnas:

    map {!}par 70j}

    Veamos finalmente unos ejemplos de macros para modo visual que permite comentar bloques selecciona-dos con almohadillas, quotes del tipo del correo (>) o dobles barras:

    vmap ## :s/^/#/vmap >> :s/^/>/vmap cc :s/^/\/\//

    La diferencia entre map!, imap, y vmap es que imap realiza mapeados en modo insercin (el mapeado sloser efectivo si estamos en modo insercin, y no surtir efecto si pulsamos la tecla, por ejemplo, en modocomando o visual), vmap realiza mapeados para el modo visual (cuando hemos pulsado v), mientras quemap! se aplica tanto a modo comando como a modo insercin.

    Cabe destacar que podemos eliminar cualquier mapeado realizado con el comando unmap.

  • Captulo 9

    En resumen

    En este sencillo tutorial apenas hemos tratado los fundamentos bsicos de este esplndido editor. La can-tidad de opciones y funciones disponibles en VIM nos permitir realizar una edicin de cualquier tipo defichero de texto o programa mucho ms rpida y eficiente que con cualquier otro editor de textos, peromuchas de estas opciones se escapan al objetivo de esta concisa (pero espero que completa) introduccin.Algunas de las posibilidades extra que nos permite Vim son:

    Edicin de mltiples ficheros y posibilidad de cambiar entre unos y otros.

    Mltiples ventanas y vistas (pantalla partida vertical, horizontal, etc.) para editar varios ficherossimultneamente vindolos en la misma pantalla del editor.

    Comparacin entre ficheros, incluyendo scroll simultneo en diferentes ventanas conforme los reco-rremos.

    Lenguaje de programacin propio interno que nos permite ampliar (sin recompilar) el editor pa-ra realizar cualquier tarea adicional: funciones propias para realizar trabajos con el texto, macros,extensiones, etc.

    Cifrado de ficheros.

    Edicin de ficheros comprimidos (compresin y descompresin de forma transparente al usuario).Plegado de bloques de lneas (que permite tener una visin general de un texto).Utilizacin como un completo entorno de desarrollo para diferentes lenguajes de programacin (edi-cin, compilacin, ejecucin y depuracin desde dentro de VIM).

    Espero que este tutorial haya cubierto vuestras necesidades bsicas de manejo de este imprescindible editor.En cualquier caso, si habis llegado hasta aqu seguramente no ser necesario que os recuerde la potenciade VIM: a estas alturas de tutorial la conoceris de sobra.

    Para finalizar, slo recordaros que la documentacin includa con VIM es todo un libro en s misma, yque la podis completar con todos los recursos disponibles en Internet. Y para recordar todo el rosario decomandos existentes, lo mejor es practicar usando el editor, que (como me sucedi a m) seguramente seos acabar convirtiendo en una herramienta imprescindible.

    SANTIAGO ROMEROhttp://www.escomposlinux.org/sromero/

    35