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.
(ver /usr/share/vim/syntax).

asb _atajo cadena

-> Sustituciones de macros.
Ejemplo: ab _email compiler@iname.com

map comando funcion

-> macros. Para introducir carácteres especiales se usa CTRL+V en Insert mode.

Ejemplos:
map ^[c ^[I//^[j
map º {!}par 70j^M}
nmap  >>   vip:s/^/><space>/<CR>
    vmap  >>  :s/^/><space>/<CR>
(etc...)

 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.

NoP / Compiler
 

http://www.ctv.es/USERS/sromero