TUTORIAL DE VIM
Vim es el típico editor que todos queremos usar cuando seamos mayores. En partícular parece bastante complicado al principio pero cuando lo usas no puedes vivir sin él :) . Lo primero de todo es instalarlo: yo tengo los siguientes paquetes:
vim-minimal-5.3-7
vim-enhanced-5.3-7
vim-X11-5.3-7
vim-common-5.3-7
Una vez instalados (vía rpm, dkpg, apt-get o lo que sea) lo primero que debemos hacer es crearnos un .vimrc en nuestro directorio HOME para que podais ir haciendo nuestras primeras pruebas (más adelante nos haremos .vimrc más complejos).
Con vuestro (por poco tiempo) actual editor favorito creais un .vimrc en vuestro home que contenga lo siguiente (ya explicaremos qué hace cada cosa en su momento):
" Mi .vimrc: Los comentarios empiezan por dobles comillas.
set tabstop=3
set sw=3
set ai
set sm
set ruler
set nocompatible
set novisualbell
set noerrorbells
Bien, salimos grabando y nos preparamos. El editor se arranca con vim <nombre_de_fichero> o con vim a secas si aún no hemos decidido qué abrir o qué crear. Una vez dentro, en VIM hay que diferenciar 2 modos de funcionamiento: modo de inserción y modo comando. En el modo de inserción VIM se comporta como un editor de texto "normal y corriente". Es decir, lo que tecleais lo meteis en pantalla en la posición actual del cursor, como el edit, el joe, etc. En el modo comando las teclas que se pulsan no se escriben en el texto sino que son comandos para que VIM haga cosas que nos faciliten el trabajo. En particular de momento hay que quedarse con 2 teclas: la tecla 'i' que permite que pasemos a modo inserción y la tecla ESC que hace que pasemos a modo comando.
Inicialmente estamos en modo comando, de modo que pulsando i podemos introducir texto y pulsando ESC volvemos al modo comando (es muy útil estar casi siempre en modo comando a menos que estemos tecleando varios párrafos o líneas seguidas).
Vamos a ver lo que hemos aprendido hasta ahora:
ESC
Pasar a modo comando.
i
Pasar a modo inserción.
No sólo queremos introducir texto, queremos también movernos por él para subir arriba (por ejemplo) y corregir algo... para ello podemos movernos con las teclas de los cursores (arriba, abajo, izq, der) 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.
Bueno, 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 con SUPR o la tecla de borrado, o bien _en modo comando_ con la tecla x.
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.
Podéis abrir ficheros con ":e fichero", buscar cadenas con "/cadena", o insertar ficheros en la posición del cursor con ":r fichero". Por otra parte, también podéis aplicar filtros al texto completo o a un texto seleccionado (y esto es REALMENTE útil como veréis más abajo). Las macros también serán muy útiles (eso más adelante).
Resumen
de teclas:
ESC |
Pasar a modo comando. |
i |
Pasar a modo inserción. |
h, j, k, l |
Teclas de movimiento. |
:q! |
Salir sin grabar. |
:x |
Salir grabando. |
:w |
Grabar fichero. |
:e fichero |
Abrir fichero. |
:r fichero |
Insertar fichero en la posición del cursor. |
:e !comando |
Insertar salida del comando. |
:!comando |
Ejecutar comando. |
/cadena |
Buscar cadena en el fichero. |
!% !comando |
Aplicar comando al texto completo. |
v |
Modo visual: |
y |
Copiar texto seleccionado. |
c |
Cortar texto seleccionado. |
p |
Pegar texto seleccionado. |
supr |
Borramos el texto seleccionado. |
CTRL+v |
Aplicamos filtro al texto seleccionado (ej !par70j). |
INSERT |
Cambiar entre inserción/sobreescritura. |
J |
Subir la liena acual a la anterior. |
dd |
Borrar linea actual |
u |
Undo (deshacer). Util en nuestros inicios :) |
<numero>dd |
Borrar <numero> lineas: ej 6dd |
:help |
Ayuda (igual que F1) |
:help topic |
Ayuda para el topic especificado. |
Probad 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)
Probad 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 sabeis, dado que Linux tiene gran cantidad de mini-comandos que se aplican a la entrada estándar, con este método podeis hacer al texto LO QUE SEA, justificarlo, corregirlo con ispell, cualquier cosa que se os ocurra.
Sobre terminales:
Bajo XWindow he experimentado fallos con ciertas teclas (INICIO, FIN, CURSORES) bajo determinadas terminales (konsole, xterm). La única terminal que he conseguido que funcione todo correctamente, y que además ocupa muy poca memoria es wterm (recomendada infinitamente). Bajo consola no existe ninguno de estos problemas.
Fichero
de configuración: .vimrc
set tabstop=3 |
|
set sw=3 |
-> Usar tabuladores de 3 espacios. |
set ai |
-> AutoIndent. |
set sm |
|
set ruler |
-> Regla. |
set nocompatible |
-> Estilo VIM (no vi). |
set novisualbell |
-> No \b visual. |
ser noerrorbells |
-> No pitidos. |
syntax on/off |
-> Syntax
Highlighting. |
asb _atajo cadena |
->
Sustituciones de macros. |
map comando funcion |
-> macros. Para introducir carácteres especiales se usa CTRL+V en Insert mode. Ejemplos:
|
Sobre ab, tiene una gran utilidad. Supongamos que vuestra página es http://www.ctv.es/USERS/sromero/linux/linux.html y estais hasta las narices de escribir esto en las news cada vez que alguien pregunta lo mismo en el ecol.misc (¿os suena? :). En ese caso poneis en vuestro .vimrc algo como:
ab _mipagina http://www.ctv.es/USERS/sromero/linux/linux.html
Tras
eso, las próximas veces que entreis en VIM cuando querais
escribir la direccion de vuestra pagina, en modo inserción
tecleais
_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 (la cadena de sustitución no puede tener
espacios pero la frase posterior sí). Incluso podeis 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.
Ejemplo (cambiad las teclas <> por la pulsación de las mismas, todo esto en modo inserción):
ab _prueba Línea 1<CTRL+V><ESC>jiLínea 2
Esto funciona así: al teclear prueba VIM escribe "Línea 1", luego encuentra un ESC (pasar a modo comando) y luego los comandos 'j' (pasar a la siguiente línea, bajando el cursor) e 'i' (pasar a modo inserción). Finalmente escribe "Línea 2" en la posición del cursor (es decir, hemos introducido una macro de 2 líneas). El CTRL+V se usa para poder introducir una tecla especial en un texto (como el ESCAPE, el INTRO, etc).
Hay otras macros útiles (sacadas de mi .rc y de la página de Ferkys):
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 compilerARROBAiname.com
ab
_coment1 /*======================================================*/
ab <img> <img
src="" alt="">
Como veis, uso macros para páginas, emails, reglas, comentarios de C, para crear páginas HTML, etc.
¡Pero aún no lo hemos visto todo! También tenemos el comando map, que es si cabe aún más útil. Este comando del .vimrc nos permite crear verdaderas macros de teclado (que no de sustitución) con las que hacer maravillas en modo comando. El formato de map es
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
Visualmente (en el fichero) queda como:
map ^[c ^[^I//^[j
Y 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 podemos comentar con // cualquier línea de código C y que automáticamente se avance a la ste línea. 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^M} (recordad que ^M = CTRL+V y ENTER)
Ahora escribid algo, pulsad º en modo comando y será automáticamente formateado y justificado a 70 columnas. Par es inteligente y también dejará los > al principio de las líneas correctamente (aunque este sistema es sólo para párrafos).
Más ejemplos (probadlos en casa):
map ^Y ^[dd
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>
Por
último, para programadores, probad un "syntax on" en
el fichero de configuración. Para cambiar los colores id a
/usr/share/vim/syntax editando c.vim, asm.vim, etc. y syntax.vim.
Finalizando:
------------
Este tutorial es una simple
guía a los comandos más básicos que os podeis
encontrar en VIM. De hecho tiene tantas cosas que si se domina VIM la
edición de textos es casi un chiste :) ... para más
información visitad la página VI Lovers
(http://www.thomer.com/thomer/vi/vi.html) o el tutorial de
*puntero_loco y Ferkys. También hay bastante info en
http://www.vim.org. No os olvideis de man vim ni de /usr/doc/vim.
Santiago
Romero (C) 2000 :)
http://www.ctv.es/USERS/sromero
compiler@iname.com
-----------------------------------------------------------------------
Any comment?
Venga,
el próximo el del SLRN, luego el MUTT (estos son más
fáciles, sólo hay que dar una breve referencia de
configuraciones y teclas) y finalmente LYNX y W3M (si alguien
me resuelve el par de dudas que tengo con abrir múltiples
páginas en el mismo LYNX :)
--
Salu2!
El hombre nunca es demasiado viejo para aprender.