Usar VIM (el editor)

0
22

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 😡 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 [email protected]
 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.

Copiado de SRomero.org

Comments

comments

Leave a Reply