Esta p�gina puede ser redistribuida libremente bajo los t�rminos de la licencia GPL. Vease ( GPL texto original ) o si lo prefiere (Traducci�n espa�ola no oficial de la GPL) Al margen de las obligaciones legales que se derivan del uso de esta licencia rogamos sea respetada la referencia a su lugar de publicaci�n original www.ciberdroide.com. y a su autor original Antonio Castro Snurmacher (Madrid 01/01/2000).

Ausencia de Garant�a

Esta ausencia de garant�a se hace extensa a cualquier tipo de uso de este material y muy especialmente a las pr�cticas, ejercicios, y de ejemplos que encuentre en estas p�ginas. Deber� trabajar siempre salvo indicaci�n contraria con un SO Linux y con un usario distinto de 'root' sin privilegios especiales. Como directorio de trabajo se procurar� usar el directorio '/tmp' o alg�n otro que no contenga informaci�n valiosa. Tampoco se considera buena idea practicar en una m�quina que contenga informaci�n valiosa.

Todo esto son recomendaciones de prudencia. En cualquier caso si algo sale mal toda la responsabilidad ser� �nicamente suya. En ning�n caso podr� reclamar a nadie por da�os y perjuicios derivados del uso de este material. Para m�s informaci�n lea el contenido de la licencia GPL y abstengase de hacer pr�cticas si no est� dispuesto a asumir toda la responsabilidad.

EL EDITOR VI (primera parte)

Introducci�n

En primer lugar vamos a dedicar bastante esfuerzo a explicar porque aprender 'vi'. Quiz�s pens� que este cap�tulo no era para usted porque ya sabe usar otro editor. Tambi�n vamos explicar la necesidad de dedicar dos largos cap�tulos a este editor.

Cuando finalice este cap�tulo podr� editar sus ficheros con 'vi' y hacer bastante trabajo �til pero para ello quizas necesite algo m�s de esfuerzo que en cap�tulos anteriores y no porque sea dificil sino porque tendr� que practicar bastante por su propia cuenta.

Otra cosa ser� sacarle el m�ximo partido a 'vi'. En un segundo cap�tulo dedicado a 'vi' veremos opciones m�s avanzadas. Son opciones que quiz�s no necesite usar tan frecuentemente pero cuando tenga oportunidad de usarlas comprender� la potencia el editor 'vi'.

Muchos editores actuales permiten usar distintos tipos de letras y generan documentos con un aspecto precioso que adem�s coincide lo que se ve en pantalla cuando se edita, y con lo que saldr� por la impresora. Est� claro que 'vi' no sirve para esto. 'vi' est� dise�ado para editar ficheros en formato de texto est�ndar. Pero aunque solo sirva para este formato de texto lo hace muy bien y siempre tendremos oportunidad de usarlo porque a un compilador, o a un interprete le da igual la est�tica.

Son muchos los editores disponibles en Linux pero desde un principio dijimos que este curso podr�a servir en gran medida para aprender otros SO tipo Unix. El editor 'vi' est� presente desde hace mucho tiempo en un mont�n de sistemas tipo Unix. Aqu� explicaremos solo unos pocos aspectos de 'vi' con la idea de que pueda realizar con razonable soltura la edici�n de un texto en 'vi'. Con muy pocos comandos de 'vi' se pueden hacer muchas cosas y 'vi' es un editor que para ciertas tareas resulta de una potencia incre�ble. El que escribe estas lineas lo est� haciendo con 'vi' y lleva muchos a�os usando este editor pr�cticamente para casi todo y le saco un gran partido, pero cada vez que me encuentro con algui�n que sabe bastante de 'vi' aprendo algo nuevo. 'vi' es un editor muy pr�ctico sin tener que conocerlo a fondo pero en manos de un experto resulta de una eficacia espectacular.

'vi' es un editor de lineas interactivo y ha sido muy criticado. Una de las razones para ello es que tiene varios estados o formas de funcionamiento y si uno pasa de un estado a otro sin darse cuenta y continua tecleando cosas, puede ocurrir un peque�o destrozo en el fichero que est� editando. Otro inconveniente de 'vi' es que requiere un poquito de aprendizaje. Hay much�sima gente que est� acostumbrada a usar otros editores m�s intuitivos y porque no decirlo m�s c�modos, y rechazan a 'vi' como algo prehist�rico. Otra cosa que suele criticarse es que se usan letras del teclado para cosas tan normales como el movimiento del cursor y la paginaci�n del texto pero este es un claro ejemplo del condicionamiento de la cultura de Microsoft y de los PCs. 'vi' fue dise�ado para que se pudiera usar en una gran variedad de sistemas y terminales. El uso de las teclas de flechas puede lograrse mediante la adecuada configuraci�n de 'vi'. Uno de los puntos fuertes de 'vi' es su adaptabilidad.

Quiz�s una de las m�s poderosas razones para aprender 'vi' es que 'vi' forma parte de la cultura de los SO tipo Unix. Muchas personas acostumbradas a trabajar por ejemplo con Windows asumir�n como est�ndar cosas que no lo son y cuando se encuentran algo diferente intentan aprovechar al m�ximo sus conocimientos anteriores.

Generalmente existe una exagerad�sima tendencia a continuar usando el primer editor que se aprendi� y luego se cambia solo de editor obligado por circunstancias poderosas. Nosotros hemos decidido que en posteriores lecciones asumiremos que usted ya sabe usar 'vi'. Pronto tendr� que hacer sus primeros programas en shell-script. Entonces necesitar� un editor y nada mejor que 'vi'.

En este curso se le da mucha importancia a la cultura Unix. Para una persona que aprende 'vi' surgen varias oportunidades para aplicar lo que sabe en comandos distintos de 'vi'. La forma de trabajar de 'vi' ha tenido mucho impacto en otros programas. Puede encontrar juegos, hojas de c�lculo utilidades, etc que usan cosas parecidas a 'vi'. Ya vimos 'sed' que usa comandos similares a algunos comandos de 'vi' y ahora vamos a ver a continuaci�n algunas nociones de otro editor ('ed') que es otro buen ejemplo de lo que estamos comentando.

'ed' versus 'vi'
Dado que 'vi' est� pensado para su uso interactivo desde un terminal no resulta muy apropiado de usar en combinaci�n con otros programas mediante redirecci�n de entrada salida. En el cap�tulo anterior de expresiones regulares vimos como 'sed' se pod�a usar como filtro de entrada salida. Existe un editor llamado 'ed' que es capaz de editar texto en modo no interactivo. Para ello se suele recurrir a un script que proporcionar� a 'ed' las instrucciones adecuadas. Somos de la opini�n de que las lecciones que no dejan ver r�pidamente cual es su utilidad y que no se practican est�n condenadas al olvido. Por eso queremos evitar que piense en t�rminos de "para que necesito yo conocer esto de ed". Por eso m�s tarde comentaremos algo de 'diff' combinado con 'ed'. As� comprender� mejor la utilidad del editor 'ed'.

Ahora vamos a generar un fichero 'ejemplo.txt' con unas pocas lineas para hacer unas pocas pr�cticas..

$ cd /tmp
$ cat <<FIN > ejemplo.txt
> No olvide visitar nuestra web
> http://www.ciberdroide.com
> y esto es todo.
> FIN

Vamos a sacar una copia para comprobar luego los cambios.

$ cp ejemplo.txt ejemplo.txt.original

Ahora generamos un fichero con las instrucciones para editar el fichero anterior. Deseamos que primero localice la linea que contiene 'www.ciberdroide.com' y a continuaci�n a�ada una linea (comando 'a') '(Tienda Virtual de Linux)'. Salimos al modo comandos (comando '.') Salvamos (comando 'w') y salimos (comando 'q').

$ cat <<FIN > ejemplo.ed
> /www.ciberdroide.com/
> a
> (Tienda Virtual de Linux)
> .
> w
> q
> FIN
$ ed ejemplo.txt < ejemplo.ed 

73
http://www.ciberdroide.com
99

Veamos como ha quedado.

$ cat ejemplo.txt

No olvide visitar nuestra web
http://www.ciberdroide.com
(Tienda Virtual de Linux)
y esto es todo.

Podemos ver las diferencias con el original usando el comando 'diff'. El comando diff es un comando que sirve para se�alar diferencias entre dos ficheros pero con la opci�n -e estas diferencias se expresan en una forma adecuada para ser interpretadas por 'ed'. Veamos como funciona.

$ diff -e ejemplo.txt.original ejemplo.txt

2a
(Tienda Virtual de Linux)
.

Vamos a partir del fichero original y le vamos a pasar por la entrada est�ndar �nicamente las diferencias obtenidas con 'diff -e'

$ cp ejemplo.txt.original ejemplo2.txt
$ diff -e ejemplo.txt.original ejemplo.txt > ejemplo.diff
$ cat ejemplo.diff

2a
(Tienda Virtual de Linux)
.

Vemos que falta las instrucciones 'w' y 'q' para salvar y salir respectivamente as� que las a�adimos al fichero 'ejemplo.diff'.

$ cat <<FIN >> ejemplo.diff
> w
> q
> FIN
$ cat ejemplo.diff

2a
(Tienda Virtual de Linux)
.
w
q

Ya tenemos todas las instrucciones necesarias. Vamos a aplicar los cambios con 'ed'.

$ ed ejemplo2.txt < ejemplo.diff

73
y esto es todo.
99

$ cat ejemplo2.txt

No olvide visitar nuestra web
http://www.ciberdroide.com
(Tienda Virtual de Linux)
y esto es todo.

En lugar de guardar varias versiones de un gran fichero que sufre peque�as diferencias de vez en cuando se podr�a guardar una sola versi�n y unos peque�os ficheros con esas diferencias ocurridas entre una versi�n y la siguiente. De esta forma podr�an aplicarse secuencialmente para ir recuperando sucesivamente las versiones anteriores en caso de necesidad. Cuando se desarrolla una aplicaci�n se van introduciendo sucesivamente cambios en los programas y para poder recuperar versiones antig�as habr�a que ir salvando y conservando cada nueva versi�n. Los programas que se utilizan para el mantenimiento de distintas versiones de una aplicaci�n suelen basarse en esta idea para ahorrar espacio de almacenamiento.

'vim' versus 'vi'
En Linux existe un editor 'vi' muy mejorado que se llama 'vim'. Este editor es muy similar a 'vi' pero con importantes mejoras. La m�s importante sin lugar a dudas es la capacidad de deshacer retrocediendo uno a uno en los �ltimos cambios realizados. Esto permite recuperar aquello de los destrozos que dijimos antes. Tambi�n permite resaltar la sintaxis de ciertos ficheros como. shell-script, html, lenguaje C, y otros muchos lenguajes. Este y otros detalles lo hacen muy adecuado para programar. El manejo del cursor en los distintos modos del editor resulta mucho m�s c�modo y un mont�n de cosas m�s.

Mas adelante veremos que se pueden usar distintas opciones para que el editor funcione en la forma que nosotros queramos. 'vim' puede ejecutarse en modo compatible 'vi' (:set compatible) pero es mejor usar el modo no compatible que nos proporcionar� las agradables ventajas sobre el 'vi' tradicional que antes comentamos. (:set nocompatible) Generalmente en Linux se instala 'vim' como sustituto de 'vi' de forma que aunque usted teclee 'vi' en realidad puede estar ejecutando 'vim' o 'elvis' u otros similares. Salgamos de dudas:

$ vi -? | less

Solo si le invita a usar la opci�n '-h' h�galo.

$ vi -h | less

Compruebe en las primeras lineas si se trata de 'vim'. Si ya ha entrado por error en editor salga mediante <ESC> :q<ENTER> Continuemos averiguando cosas.

$ whereis vi
$ whereis vim
$ whereis elvis
$ man vi
$ man vim
$ man elvis
$ man ex
$ man view
$ man ed

Ahora si vamos a entrar y a salir en el editor.

$ vi

Ya est� dentro del editor. Compruebe si sale informaci�n relativa al tipo de editor y salga tecleando ':q' Para significar que estamos en el editor 'vi' pondremos el fondo azul oscuro y las letras en amarillo son las que salen en pantalla y en blanco las que introducimos nosotros.


~                      VIM - Vi IMproved
~
~                         version 5.3
~                   by Bram Moolenaar et al.
~
~                 Vim is freely distributable
~        type  :help uganda<Enter>     if you like Vim
~
~        type  :q<Enter>               to exit
~        type  :help<Enter>  or  <F1>  for on-line help
~        type  :help version5<Enter>   for version info
~
~
:q

Cuadro resumen para el uso de 'vi'
A continuaci�n se describen una serie de comandos de uso frecuente en 'vi'. Se destacan los que se consideran m�s importantes con un mayor numero de asteriscos. En una primera lectura le recomendamos que empiece a utilizar y a aprender aquellos comandos marcados con '***' que son los m�s importantes. Le aconsejamos que no pase de lecci�n hasta que no se aprenda como m�nimo los comandos calificados con '***'. Al final del cap�tulo como es costumbre pondremos un test pero solo haremos preguntas sobre comandos calificados con '***' que ser�n los que practicaremos de forma especial en este cap�tulo.

Hemos agrupado toda esta informaci�n en un �nico cuadro para que sea su chuleta, para usar y aprender 'vi'. Solo se incluyen los comandos que suponemos ser�n de la mayor utilidad para un usuario novato y dado que hay varias formas de hacer una misma cosa hemos elegido por usted y hemos clasificado de forma totalmente subjetiva una serie de comandos para que inicialmente tenga que aprender solo un reducido n�mero de ellos. Tambi�n se incluyen otros comandos para que pueda ser usado como un cuadro de consulta bastante completo.

        ***       --> Comando de uso imprescindible.
        **        --> Comando de uso muy frecuente.
        *         --> Comando de uso no tan frecuente.

LINEA DE COMANDOS
***vi Editar un nuevo fichero
***vi <fichero> Editar un fichero. (Si el fichero es de solo lectura lo editara en modo solo lectura.
*vi <fichero1> <fichero2> <fichero3> ... Editar varios ficheros sucesivamente.
**vi -R <fichero>Editar en modo solo lectura.
**vi -r <fichero>Editar recuperando modificaciones no salvadas.
MODO COMANDOS
Se pasa desde el modo entrada (inserci�n o reemplazo) mediante <ESC>.
Movimientos del cursor
.
**h Car�cter anterior
**<ENTER> Linea siguiente
**j Linea siguiente
**k Linea anterior
**<ESPACIO> Car�cter siguiente
**l Car�cter siguiente
*L Ultima linea de la pantalla
*H Primera linea de la pantalla
*M Linea central de la pantalla
*<CTRL+B> Retroceso de p�gina
*<CTRL+F> Avance p�gina
*+ Primer car�cter de la linea siguiente
*- Primer car�cter de la linea anterior
*$ Desplazarse al final de linea.
*0 Desplazarse al principio de linea.
Modo entrada de texto
.
***i Pasar a modo entrada insertando.
***R Pasar a modo entrada reemplazando.
**a Avanzar el cursor y pasar a modo entrada insertando.
***o Insertar una linea despu�s de la actual y pasar a insertar.
*O Insertar una linea antes de la actual y pasar a insertar.
Corregir
.
***u Deshacer �ltima modificaci�n. (En vim se pueden ir deshaciendo los
los �ltimos cambios en otros editores vi solo se deshace el �ltimo cambio).
***<CTRL+R> En 'vim' sirve para deshacer el �ltimo comando 'u'
**U Recuperar linea completa.
Buscar
.
**/ Busca una cadena de caracteres, hacia delante.
*? Busca una cadena de caracteres, hacia atr�s.
*n Siguiente en la b�squeda.
*N Anterior en la b�squeda.
Copiar, Mover, y borrar lineas
.
***dd Borrar una linea.
***<n>dd borrar <n> lineas.
***yy Meter una linea en el buffer.
***<n>yy Meter <n> lineas en el buffer.
***p Copiar la linea del buffer despu�s de la l�nea actual.
*P Copiar la linea del buffer antes de la l�nea actual.
Varios
.
***<CTRL+L> Refrescar pantalla. (�til cuando se descompone la pantalla)
**<CTRL+G> Visualiza el nombre del fichero, numero de lineas totales y en que linea estamos.
***J Une la l�nea actual con la siguiente.
**. Repetir �ltimo comando.
***: Pasar al modo ex (Modo comandos)
***ZZ Terminar salvando si hubo cambios.
MODO EX
Se pasa desde el modo de comandos al modo ex con ':'
Se puede forzar a entrar directamente en este modo
usando la opci�n '-e' o ejecutando el comando 'ex'.
** :<#linea> Ir a una linea.
* :e <fichero> Pasa a editar de forma simultanea otro fichero.
* :e # Volver al fichero anterior.
*** :w Salvar. (No puede sobreescribir si se entr� con vi -R)
*** :w! Salvar forzando (Cuando falla :w).
** :x Salir salvando si es necesario.
*** :w <fichero> Salvar con otro nombre. (No puede existir el fichero)
*** :w! <fichero Salvar con otro nombre forzando.(Permite sobreescribir)
*** :r <fichero> Lee un fichero y lo carga en el lugar indicado por la posici�n actual del cursor.
** :r !<comando Ejecuta en una subshell el comando y guarda el resultado
del mismo en la posici�n indicada por el cursor.
*** :q Salir si no hay modificaci�n.
*** :q! Salir sin salvar cambios.
** :wq Salir salvando cambios.
* :sh Ejecutar una subshell (se retorna con exit).
* :g/<s1>/p Visualizar lineas que tienen <s1>
* :g/<s1>/s//<s2>/g Sustituir globalmente <s1> por <s2>.
* :g/<s1>/s//<s2>/gc �dem pero pidiendo confirmaci�n.
* :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 inserci�n (m hace n)
* :unmap m Destruir macro m
* :unmap! m Destruir macro de inserci�n m.
* :cd Cambiar de directorio actual.
** :set nu Activar visualizaci�n de n�meros de l�nea
** :set nonu Activar visualizaci�n de n�meros de l�nea
** :set all Ver todas las opciones con sus valores.
** :set nocompatible Opci�n de 'vim' para no obligar a ser compatible 'vi'
*** :set showmode Para visualizar siempre el modo en que nos encontramos.
*** :!<comando> Ejecutar un comando en una subshell.(Ver ejemplos con !)
Muchos de estos comandos
pueden aplicarse dentro de un
rango de l�neas especificado.
Un n�mero de l�nea (#linea) puede venir como:
Un punto . L�nea actual
Un punto .-N N L�neas antes de la actual
Un punto .+N N L�neas despu�s de la actual
Un n�mero N L�nea N
Un $ $ Ultima l�nea.
Un $ % Desde la �ltima a la primera l�nea (Abreviatura de 1,$).
*** :#linea1, #linea2 w <fichero> Salvar desde 1 hasta la 2 en <fichero>
** :#linea1, #linea2 co #linea3 Copiar desde 1 hasta 2 en 3.
** :#linea1, #linea2 mo #linea3 Mover desde 1 hasta 2 en 3.
** :#linea1, #linea2 de Borrar desde 1 hasta 2.
** :#linea1, #linea2 s/<s1>/<s2> Sustituir la primera ocurrencia en cada linea desde 1 hasta la 2 la cadena <s1>
por la cadena <s2>
** :#linea1, #linea2 s/<s1>/<s2>/c Sustituir la primera ocurrencia en cada linea desde 1 hasta la 2 la cadena <s1>
por la cadena <s2> con confirmaci�n.
** :#linea1, #linea2 s/<s1>/<s2>/g Sustituir todas las ocurrencias en cada linea desde 1 hasta la 2 la cadena <s1>
por la cadena <s2>
** :#linea1, #linea2 s/<s1>/<s2>/gc Sustituir todas las ocurrencias en cada linea desde 1 hasta la 2 la cadena <s1>
por la cadena <s2> con confirmaci�n

Ser�a conveniente que sacara por la impresora esta informaci�n para usarla a modo de chuleta en sus primeras pr�cticas con 'vi'.

Existe otra forma de aplicar comandos dentro de un rango de lineas. Desde el modo de comandos pulsando 'v' se pasa al modo 'vi' o modo 'visual'. Entonces moviendo el cursor marcamos todo el rango de lineas que queramos tratar y pulsando ':' pasamos al modo 'ex' para aplicar el comando que queramos. Cualquier comando que se pueda introducir en 'vi' estando en el modo de 'ex' puede ser incluido en un fichero .exrc en el $HOME que servir� para que 'vi' ejecute esos comandos cada vez que arranque. Se usa mucho para definir macros y para activar determinadas opciones con set pero eso lo veremos en otro cap�tulo.

Practicando lo m�s esencial de 'vi'.
Si no se usa ninguna opci�n inicial vi empezar� en modo comandos. Para pasar al modo entrada hay varias formas pero recomendamos que se aprenda de momento solo. i, a, o, R. Ya hemos descrito estas funciones en 'chuleta-vi.txt' y practicaremos con ellas m�s adelante.

Del modo entrada (Insertar o reemplazar) se sale con <ESC>.

Normalmente trabaj�bamos en '/tmp' como directorio temporal pero esta vez vamos a crear un directorio nuestro de trabajo para poder conservar nuestro trabajo el tiempo que queramos. Para ello crearemos un directorio 'cursolinux' y nos situaremos en �l para trabajar.


$ cd
$ mkdir cursolinux
$ cd cursolinux
$ vi ej-vi1.txt

Dado que no exist�a ning�n fichero 'ej-vi1.txt' estaremos editando un fichero nuevo y dependiendo del editor usado (nosotros usaremos 'vim') aparecer� algo del tipo.


~
~
~
"ej-vi1.txt" [New File]

Est� en modo comandos y va a teclear sus dos primeros comandos. Cuando vea '<ENTER>' en los ejemplos significa que debe pulsar esa tecla.

:set showmode<ENTER>
:set nu<ENTER>

Acabamos de activar la visualizaci�n del modo de funcionamiento y la visualizaci�n de los n�meros de l�nea. Ninguna de estas cosas son necesarias para editar un fichero pero a nosotros nos van a ayudar a ver m�s claro lo que hacemos.

Ahora pulsaremos la 'i' y aparecer� en la linea inferior el indicador de que estamos en modo entrada para inserci�n. Desde este modo introduciremos las siguientes lineas de texto.

     1  Estamos practicando con el editor vi.<ENTER>
     2  No parece tan dif�cil de usar.<ENTER>
     3  Ya voy por la tercera linea y no ha ocurrido nada grave.<ENTER>
     4  <ENTER>
     5  <ENTER>
     6  Como he saltado un par de l�neas voy por la linea seis.<ENTER>
     7  De momento no escribo nada m�s.<ESC>
    ZZ

Con la tecla <ESC> salimos al modo comandos y con 'ZZ' (may�sculas) desde el modo comandos salimos salvando el fichero. Ahora vamos a volver a editarlo.

$ vi ej-vi1.txt

Volvemos a activar los modos 'showmode' y 'nu' y nos situamos en la l�nea 3 y la borramos con 'dd' luego nos situamos en la primera l�nea y hacemos 'p' que copiar� la linea eliminada a continuaci�n de la l�nea primera. 'dd' guarda siempre en un buffer la informaci�n eliminada para poder recuperarla con 'p'. Podr�amos haber borrado cinco lineas de golpe usando '5dd' y las cinco l�neas habr�an sido guardadas en el buffer para su posible recuperaci�n con 'p'.

:set showmode<ENTER>
:set nu<ENTER>
:3<ENTER>
dd
:1<ENTER>
p

Pero ahora la l�nea 2 dice que es la tercera as� que intente usted mismo borrar una de las l�neas vac�as y situarla como segunda l�nea usando de nuevo 'dd' y 'p'. Esta vez mueva de linea usando 'j' desde el modo comandos para bajar a la linea siguiente y 'k' para subir a la l�nea anterior. Si el teclado est� configurado en su editor para manejar correctamente las teclas de flechas podr� hacer esto mismo usando las teclas flecha abajo y flecha arriba en sustituci�n de la 'j' y la 'k' respectivamente. Si algo sale mal borre el fichero y vuelva a empezar procurando no volver a meter la pata. Bueno el caso es que el fichero deber�a quedar con este aspecto.

     
    1 Estamos practicando con el editor vi.
    2 
    3 Ya voy por la tercera linea y no ha ocurrido nada grave.
    4 No parece tan dif�cil de usar.
    5 
    6 Como he saltado un par de l�neas voy por la linea seis.
    7 De momento no escribo nada m�s.

Vamos a sacar una copia de este fichero modificado con otro nombre, y luego vamos a duplicar varias veces el contenido de las l�neas cuatro y cinco usando '2yy' (guarda en el buffer dos lineas) y 'p' para (copia el contenido del buffer en la l�nea actual). Asegurese que est� en modo comandos. Pulse <ESC> si no est� seguro y teclee los comandos siguientes. Advierta que algunos comandos empiezan por ':' y terminan por <ENTER> mientras que otros no.

:w ej-vi2.txt
:4<ENTER>
2yy
:3<ENTER>
p
:3<ENTER>
p
:3<ENTER>
p

Estamos repitiendo varias veces la l�nea 'No parece tan dif�cil de usar.' Deber�a quedar finalmente con este aspecto.

     
    1 Estamos practicando con el editor vi.
    2 
    3 Ya voy por la tercera linea y no ha ocurrido nada grave.
    4 No parece tan dif�cil de usar.
    5 
    6 No parece tan dif�cil de usar.
    7 
    8 No parece tan dif�cil de usar.
    9 
   10 No parece tan dif�cil de usar.
   11 
   12 Como he saltado un par de l�neas voy por la linea seis.
   13 De momento no escribo nada m�s.

Como hemos visto con '2yy' hemos metido en el buffer dos lineas en lugar de una. Para meter una sola linea habr�a bastado usar 'yy' o '1yy'. Ahora vamos a salir pero sin guardar ninguno de los cambios realizados. Primero intentar�amos salir sin m�s con ':q' desde el modo comandos.

:q

Obtendremos un aviso del editor para no perder las �ltimas modificaciones.


No write since last change (use ! to override)

Pero realmente deseamos salir sin salvar as� que intentamos de nuevo con ':q!' desde el modo comandos.

:q!

Vamos a comprobar que los �ltimos cambios no se han guardado, y vamos a ver que permisos tiene este fichero.

$ cat ej-vi1.txt

Estamos practicando con el editor vi.
No parece tan dif�cil de usar.
Ya voy por la tercera linea y no ha ocurrido nada grave.


Como he saltado un par de l�neas voy por la linea seis.
De momento no escribo nada m�s.
$ ls -l ej-vi1.txt

-rw-r--r--   1  xxxx xxxx   216 ago 12 18:224 ej-vi1.txt

La informaci�n de permisos puede ser diferente. Recuerde que dijimos que los permisos de un fichero cuando se crea dependen de la 'umask' pero ahora solo nos interesa comprobar efectivamente tenemos permisos para leer y escribir en este fichero. Vamos a eliminar los permisos de escritura del fichero y vamos a intentar editarlo nuevamente.

$ chmod 444 ej-vi1.txt
$ ls -l ej-vi1.txt
-r--r--r--   1  xxxx xxxx   216 ago 12 18:224 ej-vi1.txt
$ vi ej-vi1.txt

Probablemente aparecer� en la linea inferior de su editor una advertencia de que est� en modo solo lectura.


"ej-vi1.txt" [readonly] 7 lines, 216 characters

Bueno a pesar de ello vamos a intentar hacer cambios y como estamos practicando continuaremos con una serie de comandos que a�n no hemos visto y que ten�amos clasificados con '***'.

:3
:.,$ w trozofinal
:1,. w trozoinicial
:1,$ de
:r trozoinicial
:$
:r !date
:$
:r trozofinal
:w tempfich
:w

'readonly' option is set (use ! to override)

Permiti� escribir otros ficheros pero se niega a sobrescribir el fichero que estamos editando con los cambios porque est� en modo solo lectura y sugiere que usemos '!' para forzar su escritura.

:w!

En este caso estamos forzando la situaci�n y estamos escribiendo en un fichero en el que no tenemos permisos pero puesto que somos propietarios del mismo el editor puede manejar los permisos para dar permiso de escritura, sobrescribir el fichero y volver a cambiar los permisos dejando los permisos originales.

Podemos ejecutar comandos desde el editor as� que porque no miramos los permisos con 'ls -l'.

:!ls -l

total 6
-r--r--r--   1 xxxx xxxx       304 ago 12 119:11 ej-vi1.txt
-r--r--r--   1 xxxx xxxx       304 ago 12 119:11 ej-vi1.txt~
-rw-r--r--   1 xxxx xxxx       216 ago 12 118:28 ej-vi2.txt
-rw-r--r--   1 xxxx xxxx       304 ago 12 119:09 tempfich
-rw-r--r--   1 xxxx xxxx       147 ago 12 119:06 trozofinal
-rw-r--r--   1 xxxx xxxx       126 ago 12 119:06 trozoinicial

Press RETURN or enter command to continue

Debemos pulsar <ENTER> para volver al editor Puesto que podemos ejecutar cualquier comando tambi�n podemos ejecutar bash como una subshell. Aprovecharemos para ver los procesos activos.

:!bash
bash-2.01$ ps

  PID TTY STAT TIME COMMAND
  221   2 S    0:00 -bash
  893   2 S    0:00 vi ej-vi1.txt
  944   2 S    0:00 bash
  951   2 R    0:00 ps
bash-2.01$ exit

exit

1 returned

Press RETURN or enter command to continue

Por fin estamos de vuelta en el editor. Vamos a continuar practicando algunos comandos importantes que nos quedan.

:3<ENTER>
o
Hemos pasado a insertar abriendo una linea.<ESC>
J

Con la 'J' may�scula hemos unido dos l�neas en una. Ahora vamos a pasar al modo entrada para reemplazar.

:3<ENTER>
R
XXXXXXXXXXXXXXXXX<ESC>sertar abriendo una linea.  Ya voy por la tercera linea y no ha ocurrido nada grave.

<ESC>
<CTRL+G>


"ej-vi1.txt" [Modified][readonly] line 4 of 10 --40%-- col 44

Desde el modo comandos podemos consultar el nombre del fichero, cuantas lineas tiene en total, en que l�nea y columna estamos, y otras cosas con solo pulsar <CTRL+G> .

Ahora utilice varias veces el comando 'u'. Si est� en 'vim' ver� como se deshacen retrocediendo secuencialmente en las �ltimas modificaciones que hemos realizado. Luego si est� usando 'vim' use <CTRL+R> para avanzar de nuevo en las �ltimas modificaciones hasta recuperarlas todas. Para terminar salga con ':q!'

Practique con la combinaci�n de 'yy' o 'nyy' y 'p'. O con la combinaci�n 'dd' o 'ndd' y 'p'. Se usan mucho para copiar o trasladar peque�os bloques de informaci�n.

Para mover una linea hacer 'dd', luego situarse en la posicion destino y hacer 'p'. Para mover varias lineas hacemos algo parecido. Borramos primero varias lineas y luego desde la posici�n destino hacemos 'p'. Para copiar en lugar de mover usar�amos 'yy' en lugar de 'dd'.

Bueno utilice su propia imaginaci�n e investigue y practique por su cuenta. Esta lecci�n no le obliga a digerir conceptos nuevos pero si requiere iniciativa para practicar con el editor.

Existe un comando que lo hemos marcado como esencial cuando en realidad se usa poqu�simo pero es un comando que conviene conocer porque en el momento m�s inesperado puede ser necesario usarlo. Con este comando el editor redibuja totalmente el contenido de la pantalla. Esto puede ser necesario porque a su terminal podr�a llegarle informaci�n desde otro proceso. Por ejemplo un mensaje de error del sistema o un aviso de su administrador para que finalice antes de 10 minutos. Quiz�s su administrador es de los que repite el mensaje m�s de una vez y a cada mensaje recibido su pantalla queda totalmente destrozada. No pasa nada. Pulse <CTRL+L> y todo volver� a la normalidad. Esto puede ocurrirle cuando este usando otro programa distinto de 'vi' y quiz�s pueda usar gualmente <CTRL+L>.

Recuperar la informaci�n perdida por muerte prematura del editor
Otra cosa que debe saber es que cuando 'vi' recibe una se�al para finalizar ordenadamente guardar� el contenido de lo que est� editando en un fichero de seguridad. Para recuperar esta informaci�n necesitar� usar 'vi -r fichero'. Como ejercicio libre le proponemos que empiece a editar un fichero que llamaremos 'prueba-kill.txt'. Escriba unas cuantas cosas y sin salvar nada, pase a otro terminal y env�e un kill con el valor por defecto (15 = SIGTERM). Para eso primero tendr� que averiguar el pid del proceso vi. Por ejemplo use 'ps | grep vi'. Supongamos que averigua que su pid es 445. Bastar�a hacer 'kill 445'. Esto finalizar� la edicion del fichero 'prueba-kill.txt'. No edite este fichero con 'vi prueba-kill.txt' porque perder� todos los cambios. En cambio si edita con 'vi -r prueba-kill.txt' si los recuperar�. En este punto salve y continue editando cosas y antes de salvar los nuevos cambios vuelva a averiguar el pid desde otro terminal. Supongamos que el nuevo pid fuera 448. Env�e esta vez la se�al SIGKILL no enmascarable mediante 'kill -9 448'. Comprobar� que esta vez el editor no ser� capaz de recuperar los cambios. Por ejemplo si ocurre un apagado normal (shutdown) del sistema mientras est� usted editando o mientras usted est� ausente del terminal con la sesi�n de edici�n abierta, tampoco ocurrir� nada. La raz�n de esto, es que el sistema primero env�a a todos los procesos activos una se�al de SIGTERM para que finalicen ordenadamente. Despu�s de esto y pasados unos segundos se supone que la mayor�a de los procesos habr�n terminado. (A los restantes procesos les enviar� un SIGKILL para matarlos incondicionalmente ). Cuando le ocurra esto tendr� que volver a entrar en sesi�n con login y seguramente recibir� una notificaci�n en su correo advirtiendo de la existencia de un fichero que debe ser editado con la opci�n '-r' para recuperar informaci�n volcada durante la finalizaci�n prematura de 'vi'.

 

 

siguiente pagina

Hosted by www.Geocities.ws

1