VI vi(1) ======== Resumen de los comandos mas practicos del editor 'vi A continuacion se describen una serie de comandos de uso frecuente en vi. Se destacan LINEA DE COMANDOS ** vi *** vi Editar un fichero. (Si el fichero es de solo lectura lo editara en modo solo lectura. * vi ... Editar varios ficheros sucesivament. ** vi -R Editar en modo solo lectura. ** vi -r Editar recuperando modificaciones no salvadas. MODO ESCAPE (Se pasa desde el modo insercion mediante . Movimientos del cursor ................... ** h Caracter anterior ** j, Linea siguiente ** k Linea anterior ** l, Caracter siguiente * L Ultima linea de la pantalla * H Primera linea de la panta * M Linea central de la pantalla * ^b Retroceso de pagina * ^f Avance pagina * + Primer caracter de la linea siguiente * - Primer caracter de la linea anterior * $ Desplazarse al final de linea. * 0 Desplazarse al principio de linea. Insertar...(Se sale de este modo con . Utilice set showmode para visualizar en todo momento en que modo nos encontramos)...... *** i Pasar a insertar. ** a Avanzar el cursor y pasar a insertar. *** o Insertar una linea despues de la actual y pasar a insertar. * O Insertar una linea antes de la actual y pasar a insertar. Corregir.... *** u Deshacer ultima modificacion. ** U Recuperar linea. Buscar..... ** / Busca una cadena de caracteres, hacia delante. * ? Busca una cadena de caracteres, hacia atras. * n Siguiente en la busqueda. * N Anterior en la busqueda. Copiar, Mover, y borrar lineas.......... *** dd Borrar una linea. *** dd borrar lineas. *** yy Meter una linea en el buffer. *** yy Meter lineas en el buffer. *** p Copiar la linea del buffer despues de la linea actual. * P Copiar la linea del buffer antes de la linea actual. Varios....... ** ^l Refrescar pantalla. (Util cuando se descompone la pantalla) ** ^g Visualiza el nobre del fichero, numero de lineas totales y en que linea estamos. ** J Une la linea actual con la siguiente. ** . Repetir ultimo comando. *** : Pasar al modo ex (Modo comandos) *** ZZ Terminar salvando si hubo cambios. USOS COMUNES CON 'dd' Y CON 'yy' : Para mover una linea hacer 'dd' situarse en la posicion destino y hacer 'p'. QUE HACER SI SE PIERDE LA SESION MIENTRAS ESTAMOS EDITANDO 1) Entrar nuevamente y localizar el proceso 'vi'. 2) Si aun sigue vivo matarlo con un kill normal. (!No kill -9) 3) Reeditar con opcion -r "vi -r fichero". Para mover varias lineas igual pero borramos primero varias lineas. Para duplicar una linea hacemos yy y luego no situamos en la posicion destino y hacemos 'p'. Para duplicar varias lineas igual pero metemos primero varias lineas. MODO EX (Modo de comandos): (Aparece el prompt ':' en la linea inferior). Un numero de <#linea> puede venir como un numero, un punto o $. . Linea actual N Linea N $ Ultima linea. ** :<#linea> Ir a una linea. * :e Edicion simultanea de dos ficheros. Pasar a editar * :e # Volver al fichero anterior. *** :w Salvar. (No puede sobreescribir si se entro con vi -R) *** :w! Salvar forzando (Cuando falla :w). ** :x Salir salvando si es necesario. *** :w Salvar con otro nombre. (No puede existir el fichero) *** :w! Salvar con otro nombre forzando.(Permite sobreescribir) *** :r Lee un fichero y lo carga en el lugar indicado por la posicion actual del cursor. * :r ! Ejecuta en una subshell el comando y guardando el resultado del mismo en la posicion indicada por el cursor. *** :q Salir si no hay modificacion. *** :q! Salir sin salvar cambios. ** :wq Salir salvando cambios. * :sh Ejecutar una subshell (se retorna con exit). * :g//p Visualizar lineas que tienen * :g//s///g Sustituir globalmente por . * :g//s///gc Idem pero pidiendo confirmacion. ** :#linea1, #linea2 co #linea3 Copiar desde 1 hasta 2 en 3. ** :#linea1, #linea2 mo #linea3 Mover desde 1 hasta 2 en 3. ** :#linea1, #linea2 dl Borrar desde 1 hasta 2. ** :#linea1, #linea2 w Salvar desde 1 hasta la 2 en * :n Siguiente documento. * :args Mirar ficheros a editar. * :ab m n Abreviaturas. Teclear 1 se sustituye por 2 * :unab m Desabreviar. * :map m n Crear macro (m hace n) (Ver ejemplos con macros) * :map! m n Crear macro en modo insercion (m hace n) * :unmap m Destruir macro m * :unmap! m Destruir macro de insercion m. * :cd Cambiar de directorio actual. * :set Habilitar opcion. ** :set all Ver todas las opciones con sus valores. ** :! Ejecutar un comando en una subshell.(Ver ejemplos con !) Cualquier comando que se pueda introducir en vi estando en el modo de comandos puede ser incluido en un fichero .exrc en el $HOME que servira para que vi ejecute esoscomandos cada vez que arranque. Se usa mucho para definir macros y para activar determinadas opciones con set. EJEMPLOS CON :! Es recomendable grabar primero con :w Si deseamos abir otro editor podemos hacer: :'!vi' Cuando salga de esta nueva edicion retornara al punto actual. Si queremos habrir otra subshell podemos hacer: :'!sh' Luego para retornar introduzca exit. Tambien podemos hacer :'!ls', :'!ps', o lo que necesitemos. Observe que hacer :!cd no tiene nigun sentido ya que se ejectua en una subshell y cuando retorne a la shell original se restaura todo el entorno original incluido el directorio actual. por eso existe un comando vi :cd EJEMPLOS CON MACROS: Para escapar un caracter de escape se precedera de ^v OPERACIONES CON BLOQUES. Se pueden marcar hasta 26 posiciones ('a'..'z') para un conjunto de uno o mas ficheros editados simultaneamente. Permite trabajar marcando principio y fin de bloques para mover, copiar o borrar en varios ficheros. TAG Para editar fuentes C por ejemplo resuta muy practico. Supongamos que tenemos un fuente llamado pingpong.c. Crearemos en primer lugar un fichero tags ejecutando "ctags pingpong.c" (ver ctags(C)). Se crea un fichero tags que contendra por ejemplo lo siguiente: A plot pingpong.c ?^plot(x, y, ch)$? salir pingpong.c ?^salir(s)$? Con ello se referencian las funciones. Para editar el fichero podemos hacer vi -tplot. Aparecera el cursor en la posicion de esa funcion. Si introduciomos :ta salir desde el modo de comandos nos situaremos en esa funcion. Se pueden crear tags para varios ficheros simultaneamente mediante ctags */*.[cfg] (ver ctags(C)).