En principio Vim suele parecer bastante complicado, sobre todo por la existencia del modo comando, que no vemos en otros editores de texto plano. En la presente entrega (tal y como haremos en las futuras con otros programas) se intentará mostrar al lector el uso básico, intermedio y avanzado de Vim de forma que cada cuál adecúe el contenido del artículo a sus conocimientos de uso de GNU/Linux. El objetivo es que un usuario que nunca ha tocado Vim aprenda a utilizarlo, y que un usuario habitual de Linux descubra en Vim las ventajas que no le dan otros editores de texto (como sustituciones de cadenas o macros, mapeado de teclas y coloreado de sintaxis).
Lo primero que debemos hacer es instalar Vim. Hay varios paquetes que conforman el editor vim, siendo normalmente los siguientes:
vim-minimal-5.3-7 vim-enhanced-5.3-7 vim-X11-5.3-7 vim-common-5.3-7El paquete vim-minimal contiene los ficheros mínimos para poder ejecutar Vim (más concretamente, el editor VI), mientras que el paquete vim-enhanced ya contiene el editor VIM propiamente dicho. Vim-X11 contiene gvim, una version para Xwindow de VIM que dispone de GUI y menúes para hacer de Vim un programa algo más interactivo en cuanto al uso del ratón. Finalmente, vim-common contiene los ficheros comunes a todos ellos (configuraciones, ficheros de sintaxis, etc.) y que deberemos instalar si se desea usar cualquiera de los anteriores. Para nuestras primeras pruebas se recomienda instalar los 4 paquetes (ya sea vía rpm, dpkg, apt-get, tar.gz o desde los fuentes).
" Mi .vimrc: Los comentarios empiezan por dobles comillas. set tabstop=3 " tamaño de los tabuladores set sw=3 set ai " autoindentado de líneas al pulsar enter set sm set ruler " nos dice la fila y columna del cursor set nocompatible " Usar funcionalidades de Vim (no compatible con VI) set novisualbell set noerrorbellsTras crear el fichero (podemos obviar la inclusión de los comentarios de la derecha, creados sólo para informar al lector del significado de cada opción) salimos grabando y nos preparamos para el uso de VIM.
Inicialmente estamos en modo comando, de modo que pulsando 'i' podemos introducir texto y pulsando ESC volvemos al modo comando (es muy útil estar en todo momento en modo comando a menos que estemos tecleando varios párrafos o líneas seguidas). En resumen:
ESC Pasar a modo comando. i Pasar a modo inserción.De este modo ya podemos introducir texto en un fichero nuevo o ya existente. Pero no sólo queremos introducir texto, queremos también movernos por él para subir arriba (por ejemplo) y corregir algo, o bajar, o, en definitiva, mover el cursor para posicionarnos donde deseemos introducir texto. Para ello en VIM podemos movernos con las teclas de los cursores (arriba, abajo, izquierda, derecha) en modo inserción o comando (en ambos). En modo comando hay otras teclas de movimiento especiales para hacerlo compatible con el editor VI (en vi no se usan los cursores). Estas teclas son:
h,j,k,l Teclas de movimiento.Supongamos que subimos un par de líneas del texto que en teoría deberíamos haber escrito), y queremos añadir algo: pulsamos la tecla 'i' y escribimos lo que nos apetezca. Podemos borrar en modo comando con la tecla 'x'. En VIM (con una terminal correctamente configurada) se podrán utilizar las teclas DELETE y BACKSPACE (SUPRIMIR Y BORRAR) para realizar el borrado como en cualquier editor de texto normal.
Ya sabemos pasar de modo comando a inserción y viceversa. También sabemos introducir texto y borrarlo. Ahora es el momento de aprender a grabar el fichero que hemos creado. En modo comando esto se hace con :w (pulsamos ESC, la tecla de ':' y luego la w, seguido de INTRO, y podremos ver como todo esto aparece en la barra de estado de abajo). También tenemos :x para salir grabando y :q! para salir sin grabar.
Podemos abrir ficheros con ":e fichero", buscar cadenas con "/cadena", o insertar ficheros en la posición del cursor con ":r fichero". También es posible insertar la salida de un comando dentro del fichero que estamos editando: ":r ! ls " insertará en la posición actual del cursor la salida de la ejecución del comando ls.
Finalmente, en cualquier momento podemos obtener ayuda general en línea en el programa con ":help", o ayuda más concreta sobre un tema en concreto con ":help tema". La ventana de ayuda (porque Vim soporta multiventana) se cierra como cualquier otra: con ":q!".
Mediante esta sencilla introducción ya podemos hacer un uso básico de vim para las tareas estándar de edición de textos en el sistema. Probablemente algún lector pensará "demasiadas teclas para hacer cosas tan habituales". Tal vez, pero si tal lector continúa leyendo las posibilidades y funcionalidades que le ofrece Vim tal vez cambie de opinión con respecto a la gran cantidad de tiempo que ahorrará mediante el uso de este impresionante editor.
set ttyfast " terminal rápida. set tw=72 " tamaño máximo de línea. syntax on " Syntax Highlighting. ab _atajo cadena " Sustituciones de macros. map comando funcion " macros.Algunas de las cosas más destacables de este fichero son:
syntax on: Esta opción activa el coloreado de sintaxis de Vim. Esto hará que al editar ciertos archivos especiales (código fuente C/C++, archivos html, ficheros de configuración, scripts perl/awk/bash, etc.) se utilice un modo de coloreado de las palabras clave, números, etc. que permitan hacer más agradable la edición de dicho fichero (igual que hacen los IDEs de Borland con colores para determinadas palabras clave, como puede verse en la figuras 2). Esto es muy útil para programadores y para usuarios que desean editar sus ficheros de configuración con algo de vistosidad para diferenciar las opciones de los comentarios, etc. Si no se activa en el .vimrc se puede hacer en cualquier momento con :syntax on.
ab y map: Como veremos a continuación, estas 2 opciones son tan útiles que por sí solas ya justifican el uso de Vim como editor de textos para correo, news, programación, etc.
ab _mipagina http://www.ctv.es/USERS/sromero/linux/linux.htmlA partir de ese momento, cuando deseemos escribir la direccion de vuestra pagina, en modo inserción tecleamos _mipagina y al darle a espacio tras esta cadena (es decir, no seguir escribiendo letras) VIM sustituye la cadena por la frase que viene después en el .vimrc (la cadena de sustitución no puede tener espacios pero la frase posterior sí), de modo que hemos escrito una dirección completa con tan sólo un par de letras.
La utilidad es infinita:
ab hispa http://www.hispalinux.es ab salu2 Saludos a todos. ab chao Chao a todos y saludos...Incluso podemos incluir comandos especiales dentro de ella (que simulen la pulsación de determinadas teclas) para por ejemplo incluir saltos de línea y por tanto cadenas con varias líneas. Esto se hace en modo inserción con CTRL+V y los comandos VI de bajar y subir líneas, o usando los nombres de las teclas.
ab _prueba Línea 1<CR>Línea 2Donde <CR> hay que escribirlo tal cual (< seguido de CR seguido de >) y cuyo significado es Retorno de Carro, es decir, equivale a pulsar ENTER.
La tecla CTRL+V se usa para poder introducir una tecla especial en un texto (como el ESCAPE, el INTRO, etc). Esto nos permitiría insertar un ESCAPE en cualquier macro, aunque tambien podemos usar simplemente el nombre de tecla <ESC>.
Hay otras macros útiles serían:
ab _guia http://www.ctv.es/USERS/sromero/guialinux/guialinux.html iab _hora <C-R>=strftime("%H:%M")<CR> iab _fecha <C-R>=strftime("%a %b %d %T %Z %Y")<CR> iab _ruler 1234567890123456789012345678901234567890123456789012(y más) ab _ecol es.comp.os.linux. ab _email nopARROBAtodolinux.org ab _coment1 /*======================================================*/ ab <img> <img src="" alt="">Como puede verse, es posible usar macros para páginas, emails, reglas, comentarios de C, para crear páginas HTML, programación, atajos para el correo y news, direcciones, etc. Además pueden servir para autocorrección de errores comunes:
iab Saludso Saludos iab sal2u salu2 iab bemos vemosCuando tecleemos incorrectamente alguna de las tres palabras sustituidas anteriores, ésta será reemplazada por la versión correcta de la misma, gracias a la sustitución de cadenas. Si hacemos determinados errores habituales casuados por nuestra velocidad de tecleado, esto puede reducirlos al mínimo, dejando muy limpios nuestros mensajes de correo y news (Vim puede usarse integrado con cualquier cliente de correo y news, como veremos en próximas entregas).
map tecla teclas
Donde 'tecla' es la tecla que pulsaremos en modo comando para ejecutar el comando, y "teclas" son las teclas que simulará nuestro comando. (Para introducir teclas especiales recordad que hace falta CTRL+V en modo inserción). Ejemplos:
map <CTRL+V><ALT+C> <CTRL+V><ESC>^I//<CTRL+V><ESC>j(para introducir lo anterior, donde pone <CTRL+V> pulsar en modo inserción CONTROL+V, donde pone <ALT+C> pulsar ALT+C, y donde pone <ESC> pulsar la tecla ESC).
Visualmente (en el fichero) queda como:
map ^[c ^[^I//^[jY lo que hace es: cuando pulsemos ALT+C, se ejecuta ESC (pasar a modo comando), seguido de ^ (comando para ir al inicio de una línea), seguido de 'I' (pasar a modo inserción), seguido de // (en modo inserción esto se escribe al principio de la línea, donde estamos gracias a ^), seguido de ESC (pasar a modo comando) y 'j' (avanzar a la siguiente línea). Es decir, gracias a esta macro pulsando ALT+C podremos comentar con // cualquier línea de código C y que automáticamente se avance a la siguiente línea, sea cual sea la posición del cursor. Podemos hacernos también macros para comentar en programación de shell bash (poniendo #), quotear texto en mensajes (poniendo > y asignándoselo a la tecla ALT+Q, con "map ^[q ^[^I>^[j" ), etc.
Otro ejemplo de macros son para justificar párrafos automáticamente. Instalad par (formateador de textos) en vuestro sistema y añadid esta macro:
map º {!}par 70j<CR>} (<CR> se escribe tal cual).Ahora escribid un párrafo de varias líneas, pulsad la tecla 'º' en modo comando y será automáticamente formateado y justificado a 70 columnas (figura 4). Par es inteligente y también dejará los > al principio de las líneas correctamente (aunque este sistema es sólo para párrafos). Recordad que debeis tener instalado par, un reformateador de párrafos bastante bueno y que podeis obtener de los repositorios de paquetes habituales (http://www.freshmeat.net, http://www.debian.org, o http://rpmfind.net ).
Más ejemplos:
nmap ## vip:s/^/#<space>/<CR> vmap ## :s/^/#<space>/<CR> nmap >> vip:s/^/><space>/<CR> vmap >> :s/^/><space>/<CR> nmap cc vip:s/^/\/\/<space>/<CR> vmap cc :s/^/\/\/<space>/<CR> "Para GnuPG map <F2> :.,$!gpg --clearsign -a<c-m> map <F3> :.,$!gpg -ea<c-m> "(también se admiten nombres para las teclas, como <F2>, <CR>...). "Más macros: comentar y descomentar codigo C. "para modo comando y modo inserción... map ,c ^i//<ESC>j map ,d ^:.,.s+\(^\s*\)//+\1<CR>j map! ,c <ESC>^i//<ESC>j0i map! ,d <ESC>^:.,.s+\(^\s*\)//+\1<CR>j0iTambién existe (como puede verse en los últimos ejemplos) la posibilidad de usar map! en lugar de map. map! permite usar macros que funcionan en modo inserción (no hace falta estar dentro del modo comando).
Por último, para programadores, es posible cambiar los colores del syntax on en /usr/share/vim/syntax editando c.vim, asm.vim, etc. y syntax.vim.
Tecla Función ---------------------------------------------------------------------- ESC Pasar a modo comando. i Pasar a modo inserción. h,j,k,l Teclas de movimiento. :q! Salir sin grabar los cambios realizados. :x Salir grabando los cambios. :w Grabar fichero. :e fichero Abrir fichero. :r fichero Insertar fichero en la posición del cursor. :r !comando Insertar salida del comando "" "" "". :!comando Ejecutar comando. :make Compilar si hay Makefile (saltará a los errores). /cadena Buscar cadena en el fichero (valen regexpr). !% !comando Aplicar comando al texto completo. !.,$ !comando Aplicar comando desde el cursor hasta el final. :s/cad1/cad2/g Cambiar todas las cadenas "cad1" por "cad2" :.,123s/c1/c2/g Igual que lo anterior pero hasta la línea 123. v Modo visual (seleccionar texto con cursores) y Copiar texto seleccionado (en modo visual). c Cortar texto seleccionado (en modo visual). p Pegar texto copiado (en modo visual). supr Borramos el texto seleccionado (en modo visual). !comando Aplicar filtro al texto seleccionado. (ej !par70j habiendo seleccionado texto en v). CTRL+v Modo visual que permite copiar y cortar BLOQUES cuadrados (no sólo líneas), es MUY MUY MUY útil. INSERT Cambiar entre inserción/sobreescritura. J Subir la línea actual a la anterior. dd Borrar línea actual. u Undo (deshacer). Útil en nuestros inicios :). ^r Redo (rehacer). <numero>dd Borrar <numero> líneas: ej 6dd <numero>yy Copiar <numero> líneas. <numero>p Repetir el pegado <numero> veces. <numero>comando Repetir comando: "5iHOLA <ESC>" -> 5 HOLAs. :help Ayuda (igual que F1). :help topic Ayuda para el topic especificado. SHIFT+K Página man de la palabra bajo el cursor. <numero> ^a Sumar <numero> al prox nº tras el cursor. <numero> ^x Restar <numero> al prox nº tras el cursor. cw Borra la palabra bajo el cursor y entra en modo inserción (para cambiar palabras). <numero>yy Copiar <numero> líneas desde la posición actual del cursor al buffer de copiado. p Pegar el buffer de corte. <numero>p Pegar <numero> veces el buffer de corte. Multiples ventanas: CTRL-w n Abre una nueva ventana vacía. :new fichero Abre una ventana nueva editando fichero CTRL-w w (^W^W) Cambia el cursor cíclicamente entre ventanas. CTRL-w j Cambia a la ste ventana (abajo). CTRL-w k Cambia hacia la ventana de arriba. CTRL-w c (o :q) Cierra ventana actual CTRL-w = Iguala tamaños. CTRL-w _ Maximiza la ventana actual.El lector debería probar también los siguientes ejemplos:
:r !ls / -> el tabulador completa directorios y ficheros :% !sort -> ordenación alfabética de las líneas 4dd -> borramos 4 líneas yy10p -> copiar la línea actual y repetirla 10 veces 5irepite <ESC> -> repetir 5 veces la palabra repite ;.,$ !comando -> aplicar comando desde el cursor en adelante. :.,150s/cad1/cad2/g -> reemplazar todos los cad1 por cad2 desde la línea actual hasta la línea nº 150.Podemos también a seleccionar un texto con 'v' y cuando esté seleccionado hacer :!sort (aparecerá algo como :'<,'>!sort ) y el comando se aplicará sólo al texto seleccionado. Como seguramente sabreis, dado que Linux tiene gran cantidad de mini-comandos que se aplican a la entrada estándar, con este método se le puede hacer al texto (seleccionado o completo) lo que sea, justificarlo, corregirlo con ispell, cualquier cosa que se nos ocurra.
export TERM=XTERM-DEBIAN
Santiago Romero