Personal tools
You are here: Home Documentación Charlas en el Chat Introducción al editor Vi(m)
Document Actions

Introducción al editor Vi(m)

by Lorenzo Gil Sanchez last modified 23-10-2004 11:18 PM

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
tarComo 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
tarEn el caso de que algien tenga una pregunta ha de dirigirse a lgs quien se encargará de hacersela llegar a Daniel.
tarSi 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
tarAsí 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
dmolinaBuenas
dmolinaEsta es una charla sobre ese "curioso" por lo menos editor que es el vi
dmolinaQue aunque es muy bueno no tiene la suficiente buena imagen q necesitaría
dmolinaInicialmente a la gente l parece que es complejo
dmolinaporque no funciona como un editor "normal". Me explicaré
dmolinamás tarde.
dmolinaSobre el vi:
dmolinaEs un editor en modo texto muy asociado a Unix, con una determinada filosofía de trabajar.
dmolinaSe encuentra en la mayoría de los Unix
dmolina(A veces se usa más bien por necesidá :-) )
dmolinaPero 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)
dmolinahay muchos otros (vile, vin, ...)
dmolinaLo digo de primeras porque normalmente esos editores además de poseer el mismo interfaz
dmolina(con las mismas opciones)
dmolinasuelen ofrecer opciones avanzadas
dmolinaAsí 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).
dmolinaO sea, q se lo debemos a él.
dmolinaEmpecemos:
dmolinaEl Vi poseee dos modos inicialmente
dmolinaun modo de línea de comandos, y el modo de inserción
dmolinaLos editores normalmente tiene un sólo
dmolinamodo, en el que toda tecla usual q pulsan es escrita
dmolinay ciertas opciones son comandos para el editor
dmolinaNormalmente con teclas como Alt o Controlñ
dmolinaEn vi no es así, en principio se pasa a un modo de comandos
dmolinaen el que toda tecla la interpreta como una opción.
dmolinaY un modo de inserción de texto.
dmolinaEn el que toda tecla pulsada es escrita en el fichero.
dmolinaSe pasa de una a otra con <Esc>.
dmolinaCon esc se pasa al modo comando, y desde él a modo inserción
dmolinacon alguno de las opciones siguientes:
dmolinai,a, o ,..
dmolinaque permiten insertar en la posición actual, o añadir en la línea respectivamente
dmolinaBueno.
dmolinaCon vi <file> se carga el fichero
dmolinaSi no existe se inicia para que se escriba (se creará al guardar)
dmolinaPara salir con
dmolina:q
dmolinao :q! para ignorar cambios
dmolinao :wq para guardar.
lgsuna pregunta dmolina
dmolinaEs lo primero q hay que saber
dmolinaSi?
lgscuando dices vi <file>, a que te refieres exactamente?
dmolinavi pepe.txt
dmolinapor ejemplo
dmolinao vi .vimrc
dmolinavamos, el nombre del fichero
dmolinaO sea, no es tan difícil
lgsok
dmolinaCon <esc>-i podemos empezar a escribir
dmolinaEscribimos hasta q nos hartamos y luego ponemos
dmolina:w para guardar
dmolinay :q para salir
dmolina(como ya dije se pueden combinar :wq).
dmolinaPara eso muchas opciones son simples teclas, pero eso lo hace un poco más críptico
dmolinaEl modo inserción no tiene nada más q comentar, es muy conocido
dmolinaPero el modo "comando" es más chulo
dmolinaHay tres tipos de órdenes
dmolinaOpciones de movimiento (w para avanzar una palabra en el cursor, ..)
dmolinaLa búsqueda (el famoso '/patron_busqueda/)
dmolinaY las de copia/borrado/inserción
dmolinaCpoy-Paste en Vi:
dmolinaPAra copiar y borrar se puede especficar el comando y el número de veces a aplicar
dmolinaPor ejemplo, el 'd' borra una línea.
dmolinay con '4d' se borran la siguientes 3 líneas (y la actual)
dmolinaLo mismo se puede aplicar a las demás opciones, es parte de la gracia.
dmolinaO poner intervalos.
dmolinacon ':<inicio>,<fin><numero_veces><comando>
dmolinaSe puede aplicar un cierto comando (órden) entre las líneas inicio y fin.
dmolinaY sólo fectaría a ellas.
dmolinaDonde '.' es la actual, '$' la final
--> bitland (~knoppix@62-151-149-216.tp24.ya.com) has joined #gcubo
dmolinay el valor '%' indica todo el fichero.
dmolinaCon lo que ':%d' borraría todo el fichero actual
--> herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has joined #gcubo
lgsotra pregunta dmolina
dmolinaNo 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)
dmolinaSi?
lgssi pones 4d y se borran 4 lineas, porque hay que poner los dos puntos para borrar todo el fichero? o tambien funciona %d?
dmolinaBuena pregunta.
dmolinaHay dos formas de ejecutar las órdenes
dmolinaLas sencillas se pueden expresar sin los ':'.
dmolinay no admiten intervalos.
dmolinaPor lo que para usar el % es necesario los '%'
dmolinaLos ':', perdona
lgsok, aclarado
dmolinacon los : se consigue poner varias órdenes y que se vean en pantalla
dmolina(En una línea al fondo), se puede
dmolinarectificar ya q sólo se ejecutan con un <enter>
lgsotra dmolina:
lgs<MiguelQuiros> Los comandos son caso-sensitivos, es decir es lo mismo poner d4 que poner D4?
dmolinaSí.
dmolinacon a añade al final de la línea
dmolinay con A añade en la siguiente línea (crea una justo debajo)
dmolinaPor ejemplo
dmolinaAunque las usuales son con minúsculas
dmolinaLas mayúsculas son más avanzadas.
dmolina(Es decir, más difíciles de recordar)
dmolinaOtro ejemplo:
dmolina:10,23s/string/cadena
dmolinaPermite sustituir entre las líneas 10 y 23 la palabra string por cadena
dmolinaEsto hace al vim muy potente en búsqueda y sustituciones.
dmolinaRealmente no se tiene por q usar las líneas
dmolina(nota, se puede mostrar las lñíneas con set number)
dmolinapara eso
dmolinaSe puede marcar regiones de texto para eso
dmolinaSimplemente marcando el inicio y el fín del bloque
dmolinaTodo comando será realizado entre ese bloque
dmolina(no hay que contar líneas ni nada de eso)
dmolinaSe marca con 'v'
dmolinaAl principio y al final
dmolinaEs realmente el tercer modo (modo visual se llama)
dmolinaEl vim siempre muestre el modo actual
dmolinaEl resto de editores vi no
dmolinaPor eso me gusta el vim.
dmolinaRealmente las opciones no se usan tanto
dmolinaPorque realmente utilizar las opciones de desplazamiento es algo mortal
dmolinaYa que con el vim se puede usar las flechas
dmolinapara desplazarse en modo inserción
dmolina(y el avance página, y el delete(
dmolinaO sea, que lo usual es trabajar en modo inserción, ignorando muchas opciones
dmolinaexcepto la búsqueda y el borrado, claro
dmolinaLa búsqueda es con '/<patron'
dmolinaCom usualmente es en Unix (funciona en las páginas man, en less y demás)
dmolinay '?patron' para buscar al revés
dmolina(Nota: Con un * estando en la palabra buscada vale)
dmolinay la opción de modificación también es muy útil
lgsdmolina: a que te refieres con buscar al reves?
dmolinaDe la posición actual al inicio del fichero
dmolinacon / vas de la posición actual al final del fichero
dmolinaVale?
lgssi
dmolinaUna de las opciones más interesantes es la búsqueda-y-reemplazo
dmolinaes con ':s/<patron>/<sustitucion>/'
dmolinaEs decir, que con un simple '%s/\r\n/\n/' se eliminan los retornos de Dos tan molestos
dmolinaSi se ha marcado una región visual, se aplica sólo a esa región.
dmolinaPara los conocedores de Perl, admite la misma sintaxis
dmolinaCon la salvedad de que los caracteres especiales como '(' o ')' en Perl hay que escaparlos en el texto
dmolinaY en el vi es al revés, los considera teclas normales, excepto si se escapa
dmolinaEjemplo:
dmolina':%s/\(hola\),nene/\1,nena/
dmolinaCambiaría todo 'hola, nene', por 'hola, nena'
dmolinaLa sintaxis es la misma (casi) que en Perl
dmolinaCon la salvedad de cambiar el ? por el = (son muy raros)
dmolinaEs decir, /hombers\= es igual que en Perl /hombres?
dmolinaLo demás es lo mismo.
dmolinaBueno, un resumen de ordenes:
dmolinapara ficheros:
dmolinaw => Graba, q => Salir, e => Carga otro fichero.
dmolinaPara copy-paste: y => Copia, d => Corta, p => Paste
dmolinaPara moverse : A quién le importA?
dmolinaEs decir, es algo coñazo moverse en modo comando
dmolinaSólo mencionaré que:
dmolinagg => Ir al inicio del fichero
dmolinaG => Final del fichero
dmolinay 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'
dmolinaEn el fichero de configuración .vimrc
dmolinaEn el caso de vi, claro
dmolinas/vi/vim
dmolina(espero q se me entienda ahora ;-) )
lgspregunta dmolina:
lgs<MiguelQuiros> ¿Existe algún comando de ayuda que nos proporciene una referencia rápida de los comandos más usuales?
dmolinadime
dmolinaClaro
dmolina:help o :h
dmolinaEs la ayuda
dmolinacon :h <comando> da la ayuda sobre ese comando
dmolinaHay ahí fuera muy buenos tutoriales
dmolinaAdemás de un libro del O'reilly entero :-)
dmolinaEjmplo: http://www.linuxfocus.org/English/May2000/article153.shtml
<-- Elcadaver has quit (Read error: 104 (Connection reset by peer))
dmolinaEs bastante bueno, y lista bastantes ordenes usuales
dmolinaNota, el ';' ejecuta el último comando
dmolinaRealmente ese no es mi objetivo ahora, sólo incitar la curiosidad
dmolinaImportante: El undo, por supuesto
dmolinacon 'u' se desace.
dmolinaEl vim tiene varios niveles de undo (creo q 16 por defecto)
dmolinaEs decir, se puede aplicar varias veces
dmolinao con un '3u', por ejemplo
dmolinaCon U deshacemos los cambios de la línea actual
dmolinaseal cuales sean
dmolinaTampoco son tantos comandos
dmolinarealmente se usa el undo, la búsqueda, el reemplazar,
dmolinay tal
dmolinaAhora voy a hablar de ficheros
dmolinaRealmente vi puede gestionar varios ficheros
dmolinaLos guarda en buffer y se asegura de que están siempre puestos al día (
dmolinaque si se modifica un fichero desde fuera lo recarga).
dmolinaEs un poco parecido a emacs
dmolinaen eso, puede tener abierto varios ficheros
dmolinay podemos movernos entre ellos
dmolinaa pantalla completa o en ventanas (subdidvdiendo la pantalla principal)
<-- herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has left #gcubo
lgspregunta:
lgs<herzed> hay forma de ver el comando que vas a "undo"?
dmolinaSíp, pero ahora no sé cuál es.
--> herzed (jaime@cliente-217216210141.uBRgra01.supercable.es) has joined #gcubo
dmolinaTambién se puede aplicar redo si hacer el undo de un comando q no deseabas deshacer
dmolinacon la are
dmolinacon <ctrl-r>, perdon
dmolinaBueno, para moverse entre ficheros:
dmolinacon :e cargas un fichero
dmolinapuedes cargas tantos como quieras, siempre muestra el último cargado pero todos están.
dmolina':e pepe.txt'
dmolina':e juan.txt'
dmolinaPara moverse puedes hacer ':bn' y '':bp' para ir al siguiente y al anterior
dmolinaComo es un poco coñazo de hacer lo puedes configurar
dmolinamap <a-right> :bn^M
dmolinamap <a-left> :bp^M
dmolinaCon las dos líneas anteriores en el fichero de configuración
dmolinaAsí con alt y las flechas te mueves (mucho más cómodo)
dmolinaLa orden map puede ponerse en el fichero de config
dmolinao con ':map <key1> <key2>
dmolinay cuando pulses <key1> sería equivalente a haber puesto <key2>
dmolinaEs una cosa buena del vi
dmolinaQue los ficheros de configuración son sencillos
dmolinaY que puedes configurar las teclas a tu gusto muy fácilmente.
dmolinaEjemplo:
dmolinamap <f2> :w^M
dmolinaHace que el f2 guarde el fichero actual
dmolinaSi alguna tecla no te convence te lo puedes cambiar.
dmolinaHay varios tipos de map, uno por modo (imap para interactivo, vmap para el visual además del map).
lgsduda:
lgs<MiguelQuiros> ¿Cuál es el fichero de configuración? ¿$HOME/.vimrc?
dmolinaSi, es ese.
dmolinaSimplemente se edita, y se añaden o cambian comandos
dmolinaTodo comando leído en ese fichero es como si se pusiese ':<orden>' cada vez que iniciasemos el vi
dmolinaCada comando es una línea, o separados por ';', creo
dmolinaOtra opción muy usual son las macros
dmolinacon 'ab <palabra1> <palabra2>'
dmolinaDurante la inserción al escribir la palabra1 se sustituye por palabra2
dmolinaEjemplo:
dmolina':ab mynombre Daniel Molina'
dmolinaAl poner mynombre en el fichero y darle a espacio se sustituye por el real
dmolinaPuede ser útil.
dmolinaNota, si el estilo de vi no os gusta
dmolinapor las teclas
dmolinaexiste un fichero de configuración en el proyecto cream
dmolinahttp://cream.sourceforge.net/
dmolinaQue es simplemente unos ficheros que redefinen todas las teclas
dmolinaPor las usuales en otros editores
dmolinaLa "pega" es que elimina los dos modos, y parece un editor usual
dmolinaPor eso no lo uso
dmolinaLo siento, si es q divago
dmolinaEstaba con los buffers:
dmolinacon ':ls' se pueden consultar los ficheros abiertos
dmolinay con :bd se elimina el buffer (no el fichero, q conste)
dmolinaSi se cambió algo no deja, por lo q se debe de poner :bd!
dmolina(El ! supone siempre deshacer)
dmolinaSi queremos podemos dividir la pantalla en dos
dmolinay en cada parte poner un fichero distinto
dmolinacon :split (:sp) dividimos la pantalla horizontalmente
dmolinay con :vsplit (:vsp) verticalmente
dmolinaPermite editar un fichero mirando al mismo tiempo otra parte del mismo you otro
dmolinaPara moverse entre modos se pone <ctrl-w><ctrl-w>
dmolinaY con eso puedes moverte entre ficheros
dmolinaAhora quisiera comentar algunos trucos importantes
dmolinaNota: El vim posee un editor gráfico gvim
dmolinaque posee un menú muy bueno para ir viendo las opciones hasta q estemos más cómodos con las teclas
dmolinaMUY recomendable
dmolinaNota: Algunos trucos
dmolinasacados de www.vim.org
dmolinaes una página muy interesante
dmolinacon trucos y con plugin para el vim
dmolina(Porque es muy extensible)
dmolinaHay plugin para CVS, resaltar sintaxis de muchísimos lenguajes de programación
dmolinaPlugin de gestión de ficheros, ...
dmolinaEs una gran referencia para los vim-adictos
dmolinaTruco:
dmolinacon ':set cpt=.' se puede activar autocompletion
dmolinaEn función de la frecuencia
dmolinaY también se puede utilizar para autocompletar en función del lenguaje de programación y
dmolinausando un fichero tags de esos.
dmolinaPuede ser muy útil
dmolinaY posee tabulación automática, y un montón de opciones
dmolinaRealmente es tan complejo como Emacs, y tan interesante como él
dmolinaLo q pasa es que el modo comando y modo inserción hace que la gente huya de él.
dmolinaPero para un programador posee muchas características avanzadas.
dmolinaExtracción de cabeceras de funciones, autocompletación, gestión de fichero tags, ....
dmolinaNo hay nada como programar 8 horas al día como para conocer tu editor
dmolina:-)
dmolinaAlguna duda?
dmolinaEs un gran editor, lástima q
dmolinamuchas opciones no se conozcan y no se use.
lgsparece que no hay dudas
dmolinaPero posee su comunidad, por supuesto
lgso a lo mejor es que hay muchas :)
dmolina:-)
tarBueno, 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
lgssupongo que la unica manera de aprender vi, es usar vi
dmolinaVenga, pa terminar pongo parte de mi .vimrc
tarestupendo
dmolina" Cambiamos teclas para un acceso más cómodo a múltiples ficheros
dmolina"
dmolina"
dmolinamap <tab> <C-w>w
dmolinamap <a-right> :bn^M
dmolinamap <a-left> :bp^M
dmolina" Compatibilidad con FTE
dmolinamap <f4> <C-w>w
dmolinamap <f2> :w^M
dmolinaimap <f2> ^[:w^Ma
dmolinamap <s-f4> :sp^M
dmolinamap <c-c> :bd^M
dmolinamap <f5> :only^M
dmolina" Facilidad de Modificación de datos
dmolinaimap <a-d> <esc>ldW^M
dmolinaimap <a-D> <esc>ddi
dmolina" Cambiamos el color
dmolinacolorscheme murphy
dmolina" Cambiamos el manejo de los tags
dmolinanmap gt <c-]>^M
dmolinanmap rt <c-T>^M
dmolina" Especifica que autocomplete utilizando el tag (para ser consciente)
dmolinaset cpt=t,k
dmolina" Tick #102
dmolina" Permite que el tab autocomplete si es adecuado, y si no tabula (modo inserción)
dmolinafunction 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
dmolinaendfunction
dmolinainoremap <c-space> <c-n>^M
dmolina"inoremap <tab> <c-r>=InsertTabWrapper ("forward")<cr>
dmolina"inoremap <s-tab> <c-r>=InsertTabWrapper ("backward")<cr>
dmolinalet Tlist_Ctags_Cmd='~/bin/ctags'
dmolina" mostrar lista de identificadores (plug-in Tlist)
dmolinannoremap <silent> <F8> :Tlist<CR>
dmolinalet Tlist_Sort_Type = "name"
dmolinalet Tlist_Display_Prototype = 1
dmolinalet Tlist_Use_SingleClick = 0
dmolina" Tick #370
dmolina" Permite que cuando se carge un fichero este directorio pase a ser el actual
dmolinaautocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif
dmolinalet g:explSplitRight=0    " Put new window to the left of the explorer
dmolina"Añadido por mí (CTRL-E) envía al Explorer
dmolinamap <s-e> :Sexplore^M<c-w>w:bd^M
dmolinalet Tlist_Use_Horiz_Window = 1
dmolinamap <c-e> :Sexplore^M
dmolina" enable backspace delete anyting (includes \n) in insert mode
dmolinaset backspace=2
dmolinaset nocompatible
dmolinaEso es sólo para incitaros a la curiosidad
dmolinaEsa es la parte del fichero de conf q he "personalizado"
dmolinaSi es que estos editores son un mundo en sí mismo
dmolinaNada, espero q al menos le hayais perdido el miedo
dmolinaY que investigéis un poco
dmolinanada más
dmolinaespero no haberos saturado
lgsmuchas gracias dmolina
dmolinaGracias por escuchar (o aparentar q estáis ahí ;-) )
lgstar: demodera la sala
tarmuchas gracias a ti Daniel
--- tar sets mode -n #gcubo
tarplas plas plas
lgsla curiosidad al menos me la has despertado
lgsprometo arrancar el vim una vez al dia por lo menos :)
dmolinaUsarlo, q es muy chulo
lgstar: creo que no has demoderado bien, me dice NinaNutz que no puede hablar
dmolinaEs mi "entorno" de programación
--- tar sets mode +n #gcubo
--- tar sets mode -m #gcubo
tarups
tarperdon
Crg:)
<-- MiguelQuiros has quit ("Aplicación Saliendo")
lgsjaja, como se nota que miguel no tiene tarifa plana
NinaNutzbueno ahora si: plas plas plas plas plas plas plas plas
tarya decia yo q no decia nadie ná
NinaNutzjeje
lgsbueno, ahora yo si me voy, que tengo algo de prisa
Crgen definitiva
Crgapt-get remove vi
Crgapt-get install joe
CrgxD
Crg(es coña)
lgshasta luego y gracias otra vez dmolina
dmolinaXD
dmolinaHasta luego!

Powered by Plone CMS, the Open Source Content Management System Powered by GCubo Powered by Cicode

This site conforms to the following standards: