Professional Documents
Culture Documents
1 Aprendiendo vi..........................................................................................................................................................................2 1.1 - Qu juegos me ayudarn a aprender vi?....................................................................................................................2 1.2 - Cul es la diferencia entre los modos Comando e Insercin? ................................................................................2 1.3 Un momento, mi teclado no tiene la tecla ESC qu hago?..................................................................................2 1.4 - Qu son todos esos gusanillos (~)?.............................................................................................................................2 1.5 No estoy acostumbrado a utilizar hjkl, alguna sugerencia?....................................................................................2 1.6 - Cmo me salgo sin salvar? ...........................................................................................................................................2 1.7 - Cmo inserto un fichero?...............................................................................................................................................2 1.8 - Cmo busco texto? .........................................................................................................................................................3 1.9 - Cmo bsco una secuencia de control?.....................................................................................................................3 1.10 - Cmo formateo el texto?..............................................................................................................................................3 1.11 - Cmo copio texto? ........................................................................................................................................................3 1.12 He cometido un error, cmo deshacer lo hecho?...................................................................................................4 1.13 Como escribir las sistintas secciones de un fichero en ficheros distintos?........................................................4 1.14 - Qu son los comandos dos puntos?.......................................................................................................................4 2 - Cmo buscas y sustituyes?..................................................................................................................................................5 2.1 - Cmo ejecuto un programa desde dentro de vi?.......................................................................................................5 2.2 - Hubo un apagn mientras escriba con el vi!...............................................................................................................6 2.3 - Trucos para hacer ms amigable la programacin con vi?......................................................................................6 2.4 - Macros -- Cmo las escribo? ........................................................................................................................................6 2.5 - Cmo hago que una tecla de funcin se comporte como una Macro?..................................................................7 2.6 - Hay alguna forma para abreviar texto?........................................................................................................................7 2.7 - Cmo chequeo la ortografa del documento actual? ................................................................................................7 2.8 Tengo un terminal hardcopy, puedo todava usar vi? ..............................................................................................7 3 Informacin online sobre vi y bibliografa.............................................................................................................................8 4 Macros y trucos tontos para vi ...............................................................................................................................................9 4.1 Trucos de vi tontos ...........................................................................................................................................................9 4.2 Macros tontas ....................................................................................................................................................................9 5 Referencia alfabtica rpida de vi ...................................................................................................................................... 11 5.1 Opciones de la entrada en modo Comando ( Comandos :) ................................................................................... 13 5.2 Opciones set (configuracin entorno de vi) ............................................................................................................ 14 6 Haciendo ajustes en el fichero .exrc .................................................................................................................................. 17 6.1 Fichero .exrc de ejemplo .............................................................................................................................................. 17
1 Aprendiendo vi.
Existen algunas reglas bsicas para los usuarios novatos de vi. Primero, ten un resumen de los comandos a mano y a todas horas. Segundo, consigue un buen libro que comprenda todos los aspectos de vi. Este documento no es la mejor forma para aprender vi (al menos no hasta el momento).
Esto insertar el fichero especificado en la posicin o lnea en la que ests situado en el fichero en el que ests trabajando. Si especificas un nmero antes de la r, insertar el fichero especificado en dicha lnea del fichero actual.
2.
Sitese un carcter despus del ltimo carcter del bloque que quiere marcar y pulse <letra_registro>y`<marca> (para copiar el bloque al registro <letra>) o <letra_registro>d`<marca> (para eliminar el bloque y guardarlo en registro <letra_registro>)
3.
Ya estamos listo para pegar el registro en la posicin del texto que deseemos. Solamente tendremos que colocarnos un carcter antes de la posicin en la que queramos volcar el registro o bufer y teclear <letra_registro>p. Aunque la secuencia para trabajar con marcas y distintos registros o bufers de memoria es un poco farragosa, con
la prctica se acaba automatizando y resulta casi imprescindible y realmente til. Nos evitamos tener que contar lneas para llevarnos una porcin de texto a un determinad buffer o registro. Este tipo de atajos de teclado son los que diferencias a los autnticos expertos de los vulgares usuarios de vi.
:s/viejo/nuevo/g Pero esto solo acta sobre la lnea actual As que: :%s/viejo/nuevo/g En general :[rango]s/viejo/nuevo/[cgi]
Donde [rango] es cualquier rango, incluyendo nmeros , $ (final de fichero), . (la posicin o lnea actual), % (fichero actual), o simplemente dos nmeros con una barra entre ellos. (o incluso +5 para representar las siguientes cinco lneas). [cgi] es cualquiera de las tres c, g, i o ninguna de ellas. c le dice a vi que te pregunte antes de realizar el cambio (confirm), g para que realice varias substituciones en una misma lnea si se diese el caso, i para decirle a vi que no haga distinciones entre maysculas y minsculas en la bsqueda. Si no especificas ninguno de estos caracteres despus de la barra final, solamente se cambiar la primera ocurrencia de cada lnea. Mi mtodo favorito es: :g/foobar/s/bar/baz/g Esto busca foobar, y lo cambia por foobaz. Dejar sin cambios a jailbars, con el otro mtodo no sera as. Este es mi mtodo favorito, pero es un poco complicado de recordar. Por supuestos que tambin puedes utilizar patrones de bsqueda que sean expresiones regulares, y otros pocos comandos en la parte que sustituye al texto. Si utilizas \( y \) en el patrn para formar una secuencia de escape, puedes hacer muchas cosas nifty. Por ejemplo: :g/\(foo\)\(bar\)/s/\2/\1baz/g cambiar foobar por foobaz. Las secuencias especiales permitidas son:
& cualquier cosa que encaje con la bsqueda o patrn \[1-9] The contents of the 1st-9th \(\) pair \u El siguiente carcter se pasar a maysculas \U Los caracteres hasta \e o \E se convertirn a maysculas \l El siguiente carcter se pasar a minsculas \L Los caracteres hasta \e o \E se convertirn a minsculas \[eE] finaliza la seleccin para convertir a maysculas o minsculas
Los nombres de las macros no deberan ser letras de vi que se utilicen en modo comando, como por ejemplo la a para aadir, la o para insertar lneas, Recuerda utilizar ^V antes de cualquier carcter de control que pudieses utilizar. :unmap <lhs> eliminar la macro. :map! <lhs> <rhs> har que <lhs> inserte <rhs> en el texto del documento.
2.5 - Cmo hago que una tecla de funcin se comporte como una Macro?
Si en la definicin de la macro se especifica #n donde n es un nmero entre 0 y 9, ser mapeado a la tecla de funcin apropiada. Ejemplo: :map #1 :set all Cuando pulsemos la tecla de funcin F1 ser igual que si tecleasemos :set all para que nos muestre todas las variables de entorno.
8.
Partir una lnea en la posicin en la que est el cursor, y poner un > al principio de la lnea siguiente. Si el particionamiento de palabra al final de lnea est habilitado, podra partir la ltima palabra de la primera lnea: map g may0O<ctrl-v><esc>P`ay$:s/./ /g0i><ctrl-v><esc>`aPa<ctrl-v><esc>D
9.
10. Hacer que control-x funcione como cortar, control-v como pegar, control-p como copiar. Debers marcar el principio del rea como m (utilice mm). (control-c no puede ser remapeado). map <ctrl-v><ctrl-x> "zd`m map <ctrl-v><ctrl-p> "zy`m map <ctrl-v><ctrl-v><ctrl-v><ctrl-v> "zP 11. Centra una lnea: map = 080i <ctrl-v><esc>$78hd0^D:s/ / /g<ctrl-v><enter>$p 12. Redefine el tabulador de forma que inserta 5 espacios en lugar de una marca de tabulador: map! <ctrl-v><ctrl-i> <space><space><space><space><space> 13. Cambia la lnea actual y la ltima lnea (reptalo para invertir el fichero): map v Gdd''Pj 14. Imprime el documento a la impresora por defecto (para BSD sustituya lp por lpr): map v 1G!Glp<ctrl-v><enter>u 15. Fije # para activar y desactivar los nmero de lnea: map \o# o:set nu<ctrl-v><enter>:set nonu<ctrl-v><esc>-: map \o# "wp<ctrl-v><enter> map \d# "w2dd map \x# "xdd@x"xpk map # ma3L\o#\x#\d#`a:<ctrl-v><enter>
(donde # es un nmero) realizar un comando n veces... ir a modo ex comando siguiente comando anterior prrafo siguiente prrafo anterior seccin siguiente seccin anterior ir al principio de lnea ir al final de la lnea primer carcter que no sea blanco primer carcter de la siguiente lnea primer carcter de la lnea anterior carcter siguiente lnea siguiente bsqueda hacia delante bsqueda hacia atrs encuentra el parntesis, llave o corchete correspondiente cambia la direccin del ltimo comando f, F, t, or T repite el ltimo comando f, F, t, or T repite el ltimo comando ir a una marca (seguido por la letra de la marca) ir al principio de la lnea con marca volver a la ltima marca o localizacin antes de una bsqueda ir al begin of line de la marca o localiz. anter. previa a bsqueda cambia de maysculas a minsculas o viceversa el carcter actual almacena en registro repite el ltimo comando de la Shell enva lo siguiente a comando, remplazando la salida (ejemplo desplaza el prrafo un shiftwidth a la derecha desplaza el prrado un shiftwidth a la izquierda desplaza a la derecha hasta que encuentra un matching (, [, o { desplaza a la izquierd hasta el siguiente(, [, o { que concuerde aade despus de la posicin actual aade al final de la lnea (no se usa) principio de la palabra anterior principio de la palabra anterior, ignorando signos de puntuacin repaginado de una pantalla cambia hasta... !}fmt pasa el prrafo actual al comando fmt, y remplaza la salida con la que quiera que devuelta fmt.)
C ^c d D ^d e E ^e f F ^f g G ^g h H ^h i I ^i j J ^j k K ^k l L ^l m M ^m n N ^n o O ^o p P ^p q Q ^q r R
cambia hasta el final de la lnea finaliza el modo insercin, no utilizado en modo comando borrado hasta... borra hasta el final de la lnea scroll hacia abajo de 1/2 pg, mueve al shiftwidth anter. en modo insercion final de la palabra final de la palabra, ignorando signos de puntuacin scroll de pantalla de una lnea hacia abajo encontrar... encontrar hacia atrs... avanza la pantalla una pgina no se utiliza ...Ir a [por defecto el final de fichero] muestra la lnea de estado (nombre fichero, lnea actual, lneas totales) izquierda primera lnea de la pantalla espacio atrs en modo insercin, izquierda en modo comando insercin antes de la posicin actual insercin antes del primer carcter distintos de blanco de la lnea insercion de un tabulador en modo insercin, no se usa en modo comando abajo pega la siguiente lnea al final de la lnea actual abajo en modo comando, inserta una lnea nueva en modo insercin arriba no utilizado no utilizado derecha ltima lnea de la pantalla redibuja la pantalla marca la posicin en el registro posiciona el cursor en la mitad de la pantalla retorno de carro repite la ltima bsqueda repite la ltima bsqueda, en direccin inversa abajo en modo comando abre una lnea debajo de la lnea actual abre una linea encima de la actual no utilizado poner por debajo de la lnea actual poner por encima de la lnea actual arriba en modo comando no utilizado salir y ejecutar ex no utilizado reemplazar el carcter actual reemplazar caracteres hasta que se abandone el modo insercin
^r s S ^s t T ^t u U ^u v V ^v w W ^w x X ^x y Y ^y ZZ ^z
redibujar la pantalla en modo comando substituir substituir la lnea completa no utilizado a... hacia atrs a... mueve al siguiente shiftwidth. deshacer el ltimo cambio deshacer los cambios de la lnea actual repaginar media ventana no utilizado no utilizado no utilizado comienzo de la palabra siguiente comienzo de la palabra siguiente, ignorando los signos de puntuacin no utilizado en modo comando, en modo insercin para desplazarse al principio de la palabra anterior borra el carcter actual borra el carcter anterior no utilizado copia... copia la lnea actual mueve la pantalla una lnea hacia arriba escribe y sale no utilizado
:r <fichero> :r !<comando> :nr <fichero> :!<fichero> :sh :so <fichero> :x :wq :11,12w <fichero> :w >&g;t <fichero> :w! :q :q! :e <fichero> :e! :n
inserta el fichero fichero en el fichero abierto inserta en el fichero actual la salida de la ejecucin de comando. inserta el fichero fichero en la lnea n ejecucin de comando desde el vi salir a la shell de Unix lee y ejecuta los comandos del fichero fichero. guardar y salir guardar y salir escribe desde la lnea 11 a la 12 al fichero fichero. Si no se especifica un fichero, se supone que es el fichero actual. aadir al fichero. Se pueden usar nmeros de lnea Sobreescribe el fichero actual salir Salir sin guardar los cambios editar fichero sin salir del vi descartar los cambios desde la ltima vez que se guardo el fichero editar el siguiente fichero.
:e +n <fichero> :n <ficheros> :e# :args :rew :map m n :map! m n :unmap m :unmap! m :ab <1> <2> :unab <1> :set <opcin>
editar el fichero fichero en la lnea n. especifica ficheros como la nueva lista de ficheros a editar. edita un fichero alternativo (si se usa :e <fichero>, el alternativo es el fichero original) muestra los ficheros que se van a editar rebobina la vida de los ficheros al principio crea una macro (hace que m haga n) crea una macro de modo insercion (hace que m haga n) destruye la macro m destruye la macro de modo insercin m abreviatura sustituye <1> con <2> cuando se teclee como palabra eliminar la abreviatura <1> set <opcin>...
OPCIN autoindent (ai) autoprint (ap) autowrite (aw) beautify (bf) directory= (dir=) edcompatible errorbells (eb) exrc (ex) flash (fl) hardtabs= (ht=) ignore case (ic) lisp
VALOR POR DEFECTO noai ap noaw nobf /tmp noedcompatible errorbells Noexrc noflash 8 noic nolisp
QU HACE? Hace que las nuevas lneas se indenten automticamente a la misma posicin de la lnea anterior o superior. Visualiza los cambios despus de cada comando Salva el fichero automticamente antes de :n, :! Ignora todos los caracteres de control durante la introduccin de texto (excepto tabulador (ctrl-i), newline (ctrl-j) y nueva pgina (ctrl-l)) Nombre del directorio para almacenar el buffer Utiliza las caractersticas ed-like en las substituciones. Suene la campana cuando se produzca un error Permite los ficheros .exrc fuera del directorio HOME Activa o desactiva un efecto de flash al mostrar un error. Indica el nmero de caracteres que ocuparn los tabuladores Ignora la diferencia entre maysculas y minsculas en las expresiones regulares Activael modo lisp
list magic mesg modelines (ml) number (nu) open optimize (opt) paragraphs= (para=) prompt readonly (ro) redraw remap report= scroll
nolist magic mesg noml nonumber open optimize IPLPPPQPPLIbp prompt noro noredraw remap 5 1/2 window
Visualiza todos los tabuladores (^I) y finales de lnea ($) Habilita ms expresiones regulares Permite que se envn mensajes al terminal Permite ejecutar comandos del ex al entrar en un fichero Visualiza los nmeros de lnea en el fichero. Permite abrir y visual Hace que se puedan introducir lneas de ms de 80 caracteres. Fija los delimitadores para { y } Hace que al entrar al editor EX se indique el smbolo :. No puede escribir a menos que se le de un ! Redibuja la pantalla cuando se hacen cambios. Permite macros que apuntan a otras macros. Reporta los cambios si afectan a ms de x lneas Cantidad de pantalla para hacer el scroll cuando se recibe un scroll hacia abajo en modo comando. Tambin, el nmero de lneas impresas por z. (z imprime 2*scroll) Define el final de seccin para [[ y ]] Shell por defecto. Utiliza la variable de entorno SHELL, si tiene valor. Indica el tamao de los tabuladores y de los desplazamientos producidos con los comandos <, > y la opcin Ctrl-d del autoindent. Muestra el smbolo que encaja con el actual {, }, (, ), [ o ] Muestra el modo en el que ests dentro del editor. No actualiza la visualizacin inmediatamente despus de la insercin. Fija la longitud de tabulador (en caracteres o posiciones) Nmeros de caracteres significativos para los tags o etiquetas (0 significa todos los caracteres) Define el pathaname de los ficheros que contienen los tags o etiquetas. Fija el tipo de terminal
sections= shell= (sh=) shifztwidth= (sw=) showmatch (sm) showmode slowopen (slow) tabstop= (ts=) taglength= (tl=) tags= term= terse timeout (to) ttytype= warn window= (w=) wrapmargin= (wm=)
noterse timeout
Visualiza mensajes de error ms cortos. Variable para la definicin de macros de ms de un carcter Fija el tipo de terminal Advierte si se han realizado cambios en el texto al ejecutar los comandos EX ! o shell. Nmeros de lneas en la ventana en modo visual. Fija el margen derecho. Si es mayor que 0 partir las palabras n espacios antes del borde de la pantalla. Hace que las bsquedas realizadas con los comandos Vi / y ? sean circulares, es decir, que al llegar al final del texto siga buscando desde del principio y viceversa.
warn
wrapscan (ws)
ws
writeany (wa)
nowa
Mediante EXINIT: En el sistema operativo existe una variable de entorno denominada EXINIT para definir las caractersticas del editor vi. Esta variable se puede definir directamente en la lnea de comandos, con lo que afecta a la sesin actual, o incluirla en el fichero .profile o en el .login segn se utilice la Shell de Bourne o la C Shell respectivamente, para que se utilice cada vez que se entre en el sistema operativo. Su formato depende del tipo de shell que utilice.
Para la Bourne Shell: EXINIT=[set opcin|map [!] nombre_macro definicin ] export EXINIT Para la C Shell: setenv EXINIT=[set opcin|map [!] nombre_macro definicin ]