Usar VIM (el editor).
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 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.
/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.
<numero> ^a Sumar <numero> al prox nº tras el cursor.
<numero> ^x Restar <numero> al prox nº tras el cursor.
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.
(fijaros que algunos comandos NO llevan los ':' delante)
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.
set noerrorbells -> No pitidos.
set ttyfast
set tw=72 -> Tamaño máximo de línea.
syntax on/off -> Syntax Highlighting.
(ver /usr/share/vim/syntax).
ab _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. Tambien se puede insertar
simplemente como retorno de carro para modo insercion, etc.
Ejemplo (cambiad las teclas <> por la pulsación de las mismas, todo
esto en modo inserción):
ab _prueba Linea 1<CTRL+V><ESC>jiLinea 2
ab _prueba2 Linea 1<CR>Linea 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.
Además pueden servir para autocorrección de errores comunes:
iab Saludso Saludos
¡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. Si mirais la documentación
de mutt podreis ver que también es posible usar nombres para las
teclas, como <F1>, <ESC>, 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>
"Para pipear a 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>j0i
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.
(c) 2000 Santiago Romero aka NoP / Compiler.