Introducción al editor Vi(m)
Imparte: Daniel Molina. Fecha: 19 de Febrero de 2003
| tar | Él es Ingeniero Informatico y alcualmente trabaja en el departamento de lenguages y Sistemas Informáticos de la ETSII de Granada |
|---|---|
| --> MiguelQuiros (~miguel@96-GRAN-X34.libre.retevision.es) has joined #gcubo | |
| tar | Como mienbro de Gcubo ha querido comprometerse esta noche con nosotros a enseñarnos el uso del editor Vi(m), o por lo menos introducirnos a su uso |
| tar | En el caso de que algien tenga una pregunta ha de dirigirse a lgs quien se encargará de hacersela llegar a Daniel. |
| tar | Si la pregunta sea demasiado complicada como para copiarla se le dará voz a la pesona correspondiente, quien preguntará en el canal, una vez respondida su pregunta se le quitará de nuevo la voz |
| tar | Así q si nuestro querido dmolina y los colaboradores piensan que todo es correcto puede dar comienzo la charla |
| --> NinaNutz (mariajo@gate6109.ugr.es) has joined #gcubo | |
| dmolina | Buenas |
| dmolina | Esta es una charla sobre ese "curioso" por lo menos editor que es el vi |
| dmolina | Que aunque es muy bueno no tiene la suficiente buena imagen q necesitaría |
| dmolina | Inicialmente a la gente l parece que es complejo |
| dmolina | porque no funciona como un editor "normal". Me explicaré |
| dmolina | más tarde. |
| dmolina | Sobre el vi: |
| dmolina | Es un editor en modo texto muy asociado a Unix, con una determinada filosofía de trabajar. |
| dmolina | Se encuentra en la mayoría de los Unix |
| dmolina | (A veces se usa más bien por necesidá :-) ) |
| dmolina | Pero realmente a veces cuando hablamos de vi nos estamos refiriendo a alguno de los editores clónicos de vi q existen |
| dmolina | (En Linux el más popular es el vim) |
| dmolina | hay muchos otros (vile, vin, ...) |
| dmolina | Lo digo de primeras porque normalmente esos editores además de poseer el mismo interfaz |
| dmolina | (con las mismas opciones) |
| dmolina | suelen ofrecer opciones avanzadas |
| dmolina | Así q pido perdon por adelantado si alguna opción no es muy estándar. |
| dmolina | (Nota: El vim es de un tal Bram Moolenaar, que quería un editor compatible con vi para el amiga). |
| dmolina | O sea, q se lo debemos a él. |
| dmolina | Empecemos: |
| dmolina | El Vi poseee dos modos inicialmente |
| dmolina | un modo de línea de comandos, y el modo de inserción |
| dmolina | Los editores normalmente tiene un sólo |
| dmolina | modo, en el que toda tecla usual q pulsan es escrita |
| dmolina | y ciertas opciones son comandos para el editor |
| dmolina | Normalmente con teclas como Alt o Controlñ |
| dmolina | En vi no es así, en principio se pasa a un modo de comandos |
| dmolina | en el que toda tecla la interpreta como una opción. |
| dmolina | Y un modo de inserción de texto. |
| dmolina | En el que toda tecla pulsada es escrita en el fichero. |
| dmolina | Se pasa de una a otra con <Esc>. |
| dmolina | Con esc se pasa al modo comando, y desde él a modo inserción |
| dmolina | con alguno de las opciones siguientes: |
| dmolina | i,a, o ,.. |
| dmolina | que permiten insertar en la posición actual, o añadir en la línea respectivamente |
| dmolina | Bueno. |
| dmolina | Con vi <file> se carga el fichero |
| dmolina | Si no existe se inicia para que se escriba (se creará al guardar) |
| dmolina | Para salir con |
| dmolina | :q |
| dmolina | o :q! para ignorar cambios |
| dmolina | o :wq para guardar. |
| lgs | una pregunta dmolina |
| dmolina | Es lo primero q hay que saber |
| dmolina | Si? |
| lgs | cuando dices vi <file>, a que te refieres exactamente? |
| dmolina | vi pepe.txt |
| dmolina | por ejemplo |
| dmolina | o vi .vimrc |
| dmolina | vamos, el nombre del fichero |
| dmolina | O sea, no es tan difícil |
| lgs | ok |
| dmolina | Con <esc>-i podemos empezar a escribir |
| dmolina | Escribimos hasta q nos hartamos y luego ponemos |
| dmolina | :w para guardar |
| dmolina | y :q para salir |
| dmolina | (como ya dije se pueden combinar :wq). |
| dmolina | Para eso muchas opciones son simples teclas, pero eso lo hace un poco más críptico |
| dmolina | El modo inserción no tiene nada más q comentar, es muy conocido |
| dmolina | Pero el modo "comando" es más chulo |
| dmolina | Hay tres tipos de órdenes |
| dmolina | Opciones de movimiento (w para avanzar una palabra en el cursor, ..) |
| dmolina | La búsqueda (el famoso '/patron_busqueda/) |
| dmolina | Y las de copia/borrado/inserción |
| dmolina | Cpoy-Paste en Vi: |
| dmolina | PAra copiar y borrar se puede especficar el comando y el número de veces a aplicar |
| dmolina | Por ejemplo, el 'd' borra una línea. |
| dmolina | y con '4d' se borran la siguientes 3 líneas (y la actual) |
| dmolina | Lo mismo se puede aplicar a las demás opciones, es parte de la gracia. |
| dmolina | O poner intervalos. |
| dmolina | con ':<inicio>,<fin><numero_veces><comando> |
| dmolina | Se puede aplicar un cierto comando (órden) entre las líneas inicio y fin. |
| dmolina | Y sólo fectaría a ellas. |
| dmolina | Donde '.' es la actual, '$' la final |
| --> bitland (~knoppix@62-151-149-216.tp24.ya.com) has joined #gcubo | |
| dmolina | y el valor '%' indica todo el fichero. |
| dmolina | Con lo que ':%d' borraría todo el fichero actual |
| --> herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has joined #gcubo | |
| lgs | otra pregunta dmolina |
| dmolina | No lo he dicho, pero el ':' se utiliza para poder expresar una serie de órdenes y que se vean en pantalla |
| <-- bitland has quit (Client Quit) | |
| dmolina | Si? |
| lgs | si pones 4d y se borran 4 lineas, porque hay que poner los dos puntos para borrar todo el fichero? o tambien funciona %d? |
| dmolina | Buena pregunta. |
| dmolina | Hay dos formas de ejecutar las órdenes |
| dmolina | Las sencillas se pueden expresar sin los ':'. |
| dmolina | y no admiten intervalos. |
| dmolina | Por lo que para usar el % es necesario los '%' |
| dmolina | Los ':', perdona |
| lgs | ok, aclarado |
| dmolina | con los : se consigue poner varias órdenes y que se vean en pantalla |
| dmolina | (En una línea al fondo), se puede |
| dmolina | rectificar ya q sólo se ejecutan con un <enter> |
| lgs | otra dmolina: |
| lgs | <MiguelQuiros> Los comandos son caso-sensitivos, es decir es lo mismo poner d4 que poner D4? |
| dmolina | Sí. |
| dmolina | con a añade al final de la línea |
| dmolina | y con A añade en la siguiente línea (crea una justo debajo) |
| dmolina | Por ejemplo |
| dmolina | Aunque las usuales son con minúsculas |
| dmolina | Las mayúsculas son más avanzadas. |
| dmolina | (Es decir, más difíciles de recordar) |
| dmolina | Otro ejemplo: |
| dmolina | :10,23s/string/cadena |
| dmolina | Permite sustituir entre las líneas 10 y 23 la palabra string por cadena |
| dmolina | Esto hace al vim muy potente en búsqueda y sustituciones. |
| dmolina | Realmente no se tiene por q usar las líneas |
| dmolina | (nota, se puede mostrar las lñíneas con set number) |
| dmolina | para eso |
| dmolina | Se puede marcar regiones de texto para eso |
| dmolina | Simplemente marcando el inicio y el fín del bloque |
| dmolina | Todo comando será realizado entre ese bloque |
| dmolina | (no hay que contar líneas ni nada de eso) |
| dmolina | Se marca con 'v' |
| dmolina | Al principio y al final |
| dmolina | Es realmente el tercer modo (modo visual se llama) |
| dmolina | El vim siempre muestre el modo actual |
| dmolina | El resto de editores vi no |
| dmolina | Por eso me gusta el vim. |
| dmolina | Realmente las opciones no se usan tanto |
| dmolina | Porque realmente utilizar las opciones de desplazamiento es algo mortal |
| dmolina | Ya que con el vim se puede usar las flechas |
| dmolina | para desplazarse en modo inserción |
| dmolina | (y el avance página, y el delete( |
| dmolina | O sea, que lo usual es trabajar en modo inserción, ignorando muchas opciones |
| dmolina | excepto la búsqueda y el borrado, claro |
| dmolina | La búsqueda es con '/<patron' |
| dmolina | Com usualmente es en Unix (funciona en las páginas man, en less y demás) |
| dmolina | y '?patron' para buscar al revés |
| dmolina | (Nota: Con un * estando en la palabra buscada vale) |
| dmolina | y la opción de modificación también es muy útil |
| lgs | dmolina: a que te refieres con buscar al reves? |
| dmolina | De la posición actual al inicio del fichero |
| dmolina | con / vas de la posición actual al final del fichero |
| dmolina | Vale? |
| lgs | si |
| dmolina | Una de las opciones más interesantes es la búsqueda-y-reemplazo |
| dmolina | es con ':s/<patron>/<sustitucion>/' |
| dmolina | Es decir, que con un simple '%s/\r\n/\n/' se eliminan los retornos de Dos tan molestos |
| dmolina | Si se ha marcado una región visual, se aplica sólo a esa región. |
| dmolina | Para los conocedores de Perl, admite la misma sintaxis |
| dmolina | Con la salvedad de que los caracteres especiales como '(' o ')' en Perl hay que escaparlos en el texto |
| dmolina | Y en el vi es al revés, los considera teclas normales, excepto si se escapa |
| dmolina | Ejemplo: |
| dmolina | ':%s/\(hola\),nene/\1,nena/ |
| dmolina | Cambiaría todo 'hola, nene', por 'hola, nena' |
| dmolina | La sintaxis es la misma (casi) que en Perl |
| dmolina | Con la salvedad de cambiar el ? por el = (son muy raros) |
| dmolina | Es decir, /hombers\= es igual que en Perl /hombres? |
| dmolina | Lo demás es lo mismo. |
| dmolina | Bueno, un resumen de ordenes: |
| dmolina | para ficheros: |
| dmolina | w => Graba, q => Salir, e => Carga otro fichero. |
| dmolina | Para copy-paste: y => Copia, d => Corta, p => Paste |
| dmolina | Para moverse : A quién le importA? |
| dmolina | Es decir, es algo coñazo moverse en modo comando |
| dmolina | Sólo mencionaré que: |
| dmolina | gg => Ir al inicio del fichero |
| dmolina | G => Final del fichero |
| dmolina | y con avance página, retrocede página, y el delete nos valemos |
| dmolina | (Nota importante, si el delete no funciona en vi hay que configurarlo, con |
| dmolina | 'set backspace=2' 'set nocompatible' |
| dmolina | En el fichero de configuración .vimrc |
| dmolina | En el caso de vi, claro |
| dmolina | s/vi/vim |
| dmolina | (espero q se me entienda ahora ;-) ) |
| lgs | pregunta dmolina: |
| lgs | <MiguelQuiros> ¿Existe algún comando de ayuda que nos proporciene una referencia rápida de los comandos más usuales? |
| dmolina | dime |
| dmolina | Claro |
| dmolina | :help o :h |
| dmolina | Es la ayuda |
| dmolina | con :h <comando> da la ayuda sobre ese comando |
| dmolina | Hay ahí fuera muy buenos tutoriales |
| dmolina | Además de un libro del O'reilly entero :-) |
| dmolina | Ejmplo: http://www.linuxfocus.org/English/May2000/article153.shtml |
| <-- Elcadaver has quit (Read error: 104 (Connection reset by peer)) | |
| dmolina | Es bastante bueno, y lista bastantes ordenes usuales |
| dmolina | Nota, el ';' ejecuta el último comando |
| dmolina | Realmente ese no es mi objetivo ahora, sólo incitar la curiosidad |
| dmolina | Importante: El undo, por supuesto |
| dmolina | con 'u' se desace. |
| dmolina | El vim tiene varios niveles de undo (creo q 16 por defecto) |
| dmolina | Es decir, se puede aplicar varias veces |
| dmolina | o con un '3u', por ejemplo |
| dmolina | Con U deshacemos los cambios de la línea actual |
| dmolina | seal cuales sean |
| dmolina | Tampoco son tantos comandos |
| dmolina | realmente se usa el undo, la búsqueda, el reemplazar, |
| dmolina | y tal |
| dmolina | Ahora voy a hablar de ficheros |
| dmolina | Realmente vi puede gestionar varios ficheros |
| dmolina | Los guarda en buffer y se asegura de que están siempre puestos al día ( |
| dmolina | que si se modifica un fichero desde fuera lo recarga). |
| dmolina | Es un poco parecido a emacs |
| dmolina | en eso, puede tener abierto varios ficheros |
| dmolina | y podemos movernos entre ellos |
| dmolina | a pantalla completa o en ventanas (subdidvdiendo la pantalla principal) |
| <-- herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has left #gcubo | |
| lgs | pregunta: |
| lgs | <herzed> hay forma de ver el comando que vas a "undo"? |
| dmolina | Síp, pero ahora no sé cuál es. |
| --> herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has joined #gcubo | |
| dmolina | También se puede aplicar redo si hacer el undo de un comando q no deseabas deshacer |
| dmolina | con la are |
| dmolina | con <ctrl-r>, perdon |
| dmolina | Bueno, para moverse entre ficheros: |
| dmolina | con :e cargas un fichero |
| dmolina | puedes cargas tantos como quieras, siempre muestra el último cargado pero todos están. |
| dmolina | ':e pepe.txt' |
| dmolina | ':e juan.txt' |
| dmolina | Para moverse puedes hacer ':bn' y '':bp' para ir al siguiente y al anterior |
| dmolina | Como es un poco coñazo de hacer lo puedes configurar |
| dmolina | map <a-right> :bn^M |
| dmolina | map <a-left> :bp^M |
| dmolina | Con las dos líneas anteriores en el fichero de configuración |
| dmolina | Así con alt y las flechas te mueves (mucho más cómodo) |
| dmolina | La orden map puede ponerse en el fichero de config |
| dmolina | o con ':map <key1> <key2> |
| dmolina | y cuando pulses <key1> sería equivalente a haber puesto <key2> |
| dmolina | Es una cosa buena del vi |
| dmolina | Que los ficheros de configuración son sencillos |
| dmolina | Y que puedes configurar las teclas a tu gusto muy fácilmente. |
| dmolina | Ejemplo: |
| dmolina | map <f2> :w^M |
| dmolina | Hace que el f2 guarde el fichero actual |
| dmolina | Si alguna tecla no te convence te lo puedes cambiar. |
| dmolina | Hay varios tipos de map, uno por modo (imap para interactivo, vmap para el visual además del map). |
| lgs | duda: |
| lgs | <MiguelQuiros> ¿Cuál es el fichero de configuración? ¿$HOME/.vimrc? |
| dmolina | Si, es ese. |
| dmolina | Simplemente se edita, y se añaden o cambian comandos |
| dmolina | Todo comando leído en ese fichero es como si se pusiese ':<orden>' cada vez que iniciasemos el vi |
| dmolina | Cada comando es una línea, o separados por ';', creo |
| dmolina | Otra opción muy usual son las macros |
| dmolina | con 'ab <palabra1> <palabra2>' |
| dmolina | Durante la inserción al escribir la palabra1 se sustituye por palabra2 |
| dmolina | Ejemplo: |
| dmolina | ':ab mynombre Daniel Molina' |
| dmolina | Al poner mynombre en el fichero y darle a espacio se sustituye por el real |
| dmolina | Puede ser útil. |
| dmolina | Nota, si el estilo de vi no os gusta |
| dmolina | por las teclas |
| dmolina | existe un fichero de configuración en el proyecto cream |
| dmolina | http://cream.sourceforge.net/ |
| dmolina | Que es simplemente unos ficheros que redefinen todas las teclas |
| dmolina | Por las usuales en otros editores |
| dmolina | La "pega" es que elimina los dos modos, y parece un editor usual |
| dmolina | Por eso no lo uso |
| dmolina | Lo siento, si es q divago |
| dmolina | Estaba con los buffers: |
| dmolina | con ':ls' se pueden consultar los ficheros abiertos |
| dmolina | y con :bd se elimina el buffer (no el fichero, q conste) |
| dmolina | Si se cambió algo no deja, por lo q se debe de poner :bd! |
| dmolina | (El ! supone siempre deshacer) |
| dmolina | Si queremos podemos dividir la pantalla en dos |
| dmolina | y en cada parte poner un fichero distinto |
| dmolina | con :split (:sp) dividimos la pantalla horizontalmente |
| dmolina | y con :vsplit (:vsp) verticalmente |
| dmolina | Permite editar un fichero mirando al mismo tiempo otra parte del mismo you otro |
| dmolina | Para moverse entre modos se pone <ctrl-w><ctrl-w> |
| dmolina | Y con eso puedes moverte entre ficheros |
| dmolina | Ahora quisiera comentar algunos trucos importantes |
| dmolina | Nota: El vim posee un editor gráfico gvim |
| dmolina | que posee un menú muy bueno para ir viendo las opciones hasta q estemos más cómodos con las teclas |
| dmolina | MUY recomendable |
| dmolina | Nota: Algunos trucos |
| dmolina | sacados de www.vim.org |
| dmolina | es una página muy interesante |
| dmolina | con trucos y con plugin para el vim |
| dmolina | (Porque es muy extensible) |
| dmolina | Hay plugin para CVS, resaltar sintaxis de muchísimos lenguajes de programación |
| dmolina | Plugin de gestión de ficheros, ... |
| dmolina | Es una gran referencia para los vim-adictos |
| dmolina | Truco: |
| dmolina | con ':set cpt=.' se puede activar autocompletion |
| dmolina | En función de la frecuencia |
| dmolina | Y también se puede utilizar para autocompletar en función del lenguaje de programación y |
| dmolina | usando un fichero tags de esos. |
| dmolina | Puede ser muy útil |
| dmolina | Y posee tabulación automática, y un montón de opciones |
| dmolina | Realmente es tan complejo como Emacs, y tan interesante como él |
| dmolina | Lo q pasa es que el modo comando y modo inserción hace que la gente huya de él. |
| dmolina | Pero para un programador posee muchas características avanzadas. |
| dmolina | Extracción de cabeceras de funciones, autocompletación, gestión de fichero tags, .... |
| dmolina | No hay nada como programar 8 horas al día como para conocer tu editor |
| dmolina | :-) |
| dmolina | Alguna duda? |
| dmolina | Es un gran editor, lástima q |
| dmolina | muchas opciones no se conozcan y no se use. |
| lgs | parece que no hay dudas |
| dmolina | Pero posee su comunidad, por supuesto |
| lgs | o a lo mejor es que hay muchas :) |
| dmolina | :-) |
| tar | Bueno, pues si no hay nada más, dar las gracias a Daniel por hacernos participes a todos de sus conocimientos e invitarle a que lo repita cuando quiera |
| lgs | supongo que la unica manera de aprender vi, es usar vi |
| dmolina | Venga, pa terminar pongo parte de mi .vimrc |
| tar | estupendo |
| dmolina | " Cambiamos teclas para un acceso más cómodo a múltiples ficheros |
| dmolina | " |
| dmolina | " |
| dmolina | map <tab> <C-w>w |
| dmolina | map <a-right> :bn^M |
| dmolina | map <a-left> :bp^M |
| dmolina | " Compatibilidad con FTE |
| dmolina | map <f4> <C-w>w |
| dmolina | map <f2> :w^M |
| dmolina | imap <f2> ^[:w^Ma |
| dmolina | map <s-f4> :sp^M |
| dmolina | map <c-c> :bd^M |
| dmolina | map <f5> :only^M |
| dmolina | " Facilidad de Modificación de datos |
| dmolina | imap <a-d> <esc>ldW^M |
| dmolina | imap <a-D> <esc>ddi |
| dmolina | " Cambiamos el color |
| dmolina | colorscheme murphy |
| dmolina | " Cambiamos el manejo de los tags |
| dmolina | nmap gt <c-]>^M |
| dmolina | nmap rt <c-T>^M |
| dmolina | " Especifica que autocomplete utilizando el tag (para ser consciente) |
| dmolina | set cpt=t,k |
| dmolina | " Tick #102 |
| dmolina | " Permite que el tab autocomplete si es adecuado, y si no tabula (modo inserción) |
| dmolina | function InsertTabWrapper(direction) |
| dmolina | let col = col('.') - 1 |
| dmolina | if !col || getline('.')[col - 1] !~ '\k' |
| dmolina | return "\<tab>" |
| dmolina | elseif "backward" == a:direction |
| dmolina | return "\<c-p>" |
| dmolina | else |
| dmolina | return "\<c-n>" |
| dmolina | endif |
| dmolina | endfunction |
| dmolina | inoremap <c-space> <c-n>^M |
| dmolina | "inoremap <tab> <c-r>=InsertTabWrapper ("forward")<cr> |
| dmolina | "inoremap <s-tab> <c-r>=InsertTabWrapper ("backward")<cr> |
| dmolina | let Tlist_Ctags_Cmd='~/bin/ctags' |
| dmolina | " mostrar lista de identificadores (plug-in Tlist) |
| dmolina | nnoremap <silent> <F8> :Tlist<CR> |
| dmolina | let Tlist_Sort_Type = "name" |
| dmolina | let Tlist_Display_Prototype = 1 |
| dmolina | let Tlist_Use_SingleClick = 0 |
| dmolina | " Tick #370 |
| dmolina | " Permite que cuando se carge un fichero este directorio pase a ser el actual |
| dmolina | autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif |
| dmolina | let g:explSplitRight=0 " Put new window to the left of the explorer |
| dmolina | "Añadido por mí (CTRL-E) envía al Explorer |
| dmolina | map <s-e> :Sexplore^M<c-w>w:bd^M |
| dmolina | let Tlist_Use_Horiz_Window = 1 |
| dmolina | map <c-e> :Sexplore^M |
| dmolina | " enable backspace delete anyting (includes \n) in insert mode |
| dmolina | set backspace=2 |
| dmolina | set nocompatible |
| dmolina | Eso es sólo para incitaros a la curiosidad |
| dmolina | Esa es la parte del fichero de conf q he "personalizado" |
| dmolina | Si es que estos editores son un mundo en sí mismo |
| dmolina | Nada, espero q al menos le hayais perdido el miedo |
| dmolina | Y que investigéis un poco |
| dmolina | nada más |
| dmolina | espero no haberos saturado |
| lgs | muchas gracias dmolina |
| dmolina | Gracias por escuchar (o aparentar q estáis ahí ;-) ) |
| lgs | tar: demodera la sala |
| tar | muchas gracias a ti Daniel |
| --- tar sets mode -n #gcubo | |
| tar | plas plas plas |
| lgs | la curiosidad al menos me la has despertado |
| lgs | prometo arrancar el vim una vez al dia por lo menos :) |
| dmolina | Usarlo, q es muy chulo |
| lgs | tar: creo que no has demoderado bien, me dice NinaNutz que no puede hablar |
| dmolina | Es mi "entorno" de programación |
| --- tar sets mode +n #gcubo | |
| --- tar sets mode -m #gcubo | |
| tar | ups |
| tar | perdon |
| Crg | :) |
| <-- MiguelQuiros has quit ("Aplicación Saliendo") | |
| lgs | jaja, como se nota que miguel no tiene tarifa plana |
| NinaNutz | bueno ahora si: plas plas plas plas plas plas plas plas |
| tar | ya decia yo q no decia nadie ná |
| NinaNutz | jeje |
| lgs | bueno, ahora yo si me voy, que tengo algo de prisa |
| Crg | en definitiva |
| Crg | apt-get remove vi |
| Crg | apt-get install joe |
| Crg | xD |
| Crg | (es coña) |
| lgs | hasta luego y gracias otra vez dmolina |
| dmolina | XD |
| dmolina | Hasta luego! |





