Está en la página 1de 17

Al invocar al vi con el nombre de un fichero, si este no existe lo crea.

En la pantalla del vi aparece la posicion actual del cursor resaltada,

las lineas en blanco con ~ y en la parte inferior de la pantalla aprece


la

linea de estado, que muestra el nombre del fichero y el numero de caracteres

que contiene.

Existen dos modos de operacion en el vi: modo entrada y modo comando.

- Se usa el modo entrada(edicion) para aniadir texto al fichero

- Se usa el modo comando para introducir comandos que realizan funciones

especificas del vi.

El modo por defecto es el comando.

Puesto que vi no indica en que modo se trabaja en un momento determinado,

distinguir entre ambos modos es probablemente el mayor problema que causa

confusion entre los nuevos usuarios del vi.

Cuando abres por primera vez un fichero vi, siempre esta en modo comando,

por lo que antes de poder escribir texto en el fichero debes teclear uno
de

los comandos de entrada del vi, tales como i (insert), para insertar texto

en la posicion actual del cursor, o a (append) para insertar texto despues

de la posicion actual del cursor.

Cuando se desee regresar al modo comando, basta con presionar Esc.

Si en un momento determinado no se sabe en que modo se esta, simplemente


pulsando

Esc nos aseguramos de que estamos en modo comando, con lo que se podra
seguir

con el trabajo. Si al pulsar Esc ya se estaba en modo comando, lo unico


que

pasara es que se oira un pitido.


Modo comando

Cuando abres un fichero con vi, estas en modo comando. En este modo puedes

introducir comandos que implementan un amplio rango de funciones. Muchos


de estos

comandos constan de una o dos letras y un numero opcional relacionado con

distintas funciones.

Muchos comandos no requieren pulsar Return para que se ejecuten. Las


ordenes

que empiezan por dos puntos :, sin embargo, si lo requieren.

Las ordenes precedidas por dos puntos son realmente comandos del ex. vi
y ex

son dos interfaces separadas del mismo programa de edicion de texto.


Mientras

el vi es una interfaz orientada a la pantalla, ex es una interfaz orientada

a linea. El conjunto completo de comandos ex esta disponible dentro de


vi.

Cuando se edita un fichero con el vi, los cambios no se hacen directamente

sobre el fichero. En realidad, se aplican a una copia del fichero que el


vi

crea en un espacio de memoria temporal llamado buffer. La copia en disco


del

fichero se modifica solo cuando se graban los contenidos del buffer.

Esto tiene sus ventajas y sus inconvenientes. Por un lado, significa que
puedes

salir de la edicion de un fichero y descartar todos los cambios hechos


durante

una sesion de edicion, dejando la copia de disco intacta. Por otro lado,

podrias perder el contenido no grabado del buffer de trabajo si el sistema


cae. l

La gente que esta en terminales remotos conectados por lineas de telefono


son

especialmente vulnerables para las interrupciones no planeadas.

La mejor politica es grabar tu trabajo frecuentemente, especialmente


cuando
haces cambios importantes.

AVISO: Procurar no editar un fichero con varias copias del vi al mismo


tiempo,

pues de este modo no se esta seguro de cual es la copia que esta realmente

grabada en disco.

Ya sabemos como entrar, como salir?

Para grabar nuestro trabajo sin salir del vi basta pulsar la secuencia:

Esc :w[return]

Para salir cuando no se han hecho modificaciones:

Esc :q[return]

Para salir cuando se han hecho modificaciones:

-si se quieren descartar:

Esc :q![return]

- si se quieren guardar los cambios:

Esc :wq[return]

COMANDOS BASICOS DEL vi

-MOVIENDOSE POR UN FICHERO

Cuando arrancamos el vi, el cursor esta en la esquina superior izquierda


de la

pantalla del vi. En modo comando, existen ordenes que nos permiten moverlo
por

toda la pantalla: ciertas teclas de letras, las flechas, el Return, Back


space

(tecla de borrar), y Space Bar (barra espaciadora).

NOTA: Muchos de los comandos del vi son "case-sensitive", es decir, la


misma

orden tecleada en mayusculas o minusculas puede tener efectos totalmente


distintos.

Caracter a Caracter

Si el teclado esta provisto con flechas, se pueden utilizar para mover


el cursor

libremente por el texto editado hasta el momento.

Si se usa el vi desde un terminal remoto, las flechas pueden no funcionar

correctamente, depende del emulador de terminal. En dicho caso las teclas

usadas son:

. Izquierda: h o SpcBar.

. Derecha: l o BckSpc.

. Arriba: k.

. Abajo: j.

Palabra a palabra

. Pulsando w (word) nos movemos una palabra hacia la derecha.

. Pulsando b nos movemos una palabra hacia la izquierda.

Linea a linea

. Pulsando ^ nos movemos al comienzo de la linea en la que esta el cursor.

. Pulsando $ nos movemos al final de la linea actual.

. Pulsando Return nos movemos al comienzo de la linea siguiente.

Pantalla a pantalla

. Pulsando H (high) nos movemos a la parte superior de la pantalla.

. Pulsando L (low) nos movemos a la parte inferior de la pantalla.

. Pulsando M (middle) nos movemos a la mitad de la pantalla

SCROLL y AV/RE PAGINA


Aunque se puede hacer scroll linea a linea con los comandos vistos,

cuando el fichero es muy grande, y uno desea moverse del principio al final

del mismo, no es demasiado viable esta opcion.

Para ello existen una serie de comandos que nos permiten movernos pagina

a pagina por el documento:

. Pulsando Ctrl-F (scroll forward) se avanza una pantalla, moviendose el


cursor

a la esquina superior izquierda de la nueva pantalla.

. Pulsando Ctrl-D se avanza media pantalla.

. Pulsando Ctrl-B (scroll backward) se retrocede una pantalla.

. Pulsando Ctrl-U se retrocede media pantalla.

INSERTANDO TEXTO

vi proporciona muchos comandos para insertar texto, que nos hacen pasar
del modo

comando al modo de edicion.

Aniadir

. Pulsando a (append) se inserta texto a la derecha del cursor.

. Pulsando A se aÒade texto al final de la linea en la que esta


el cursor.

Insertar

. Pulsando i (insert) se inserta texto a la izquierda del cursor.

. Pulsando I se inserta texto al principio de una linea.

Abrir una linea


. Pulsando o (open) se abre una linea debajo de la posicion actual del
cursor

. Pulsando O se inserta una linea encima de la actual posicion del cursor.

CAMBIANDO TEXTO

Cambiar texto implica sustituir una seccion de texto por otra. vi tiene
varios

modos de hacer esto, dependiendo de las circunstancias.

Cambiar una palabra

. Para reemplazar una palabra, posicionar el cursor al principio de la


palabra

a ser reemplazada, teclear cw seguido de la nueva palabra. Cuando se termine


de

modificar se pulsara Esc

. Para cambiar parte de una palabra, colocar el cursor sobre la palabra,


a la

derecha de la parte a cambiar, y proceder como en el caso anterior.

Cambiar una linea

Para reemplazar una linea, poner el cursor en cualquier parte de la linea


y

teclear cc. La linea desaparece, dejando una linea en blanco para el nuevo

texto, que puede ser de cualquier longitud. Pulsar Esc para acabar.

Cambiar parte de una linea

Para reemplazar parte de una linea, colocar el cursor a la derecha de la


parte

a modificar. Pulsar C, introducir la correccion y pulsar Esc para acabar.

Substituir caracteres

Para substituir el caracter bajo el cursor por uno o mas caracteres, teclear
s
seguido del nuevo texto y pulsar Esc cuando se acabe.

Reemplazar un caracter

Para reemplazar el caracter bajo el cursor por otro caracter, pulsar r,


seguido

por un unico caracter, pues al pulsar una tecla el vi inmediatamente pasa


a modo

comando

Trasposicionar caracteres

Esto es util para fallos tales como escribir qeu en lugar de que. Colocando
el

cursor sobre la primera letra a mover y pulsando xp, se intercambian las

posiciones de ambos caracteres.

Partir/Unir lineas

Para partir una linea sin afectar al texto, mover el cursor al espacio
donde se

quiere partir la linea y teclear r (replace) seguido de Return (se


reemplazaria

el espacio por un return)

Para unir dos lineas, colocar el cursor en la linea superior y teclear


J.

DESHACER CAMBIOS

Deshacer el comando previo

Pulsando u a continuacion del ultimo comando, se deshacen los cambios


producidos

por la ejecucion del mismo

Deshacer los cambios de una linea


Pulsando U se deshacen todos los cambios que se han hecho sobre una linea.
Este

comando funciona solo si no te has movido de la linea.

BORRAR TEXTO

Borrar un caracter

Para borrar un caracter, posicionar el cursor sobre el caracter a borrar


y

teclear x. El comando x tambien borra el espacio ocupado por el caracter.

Para borrar el caracter anterior a la posicion del cursor pulsar X.

Borrar una palabra o una parte de una palabra

Para borrar una palabra, posicionar el cursor al principio de la palabra

y pulsar dw, entonces se borrara la palabra y el espacio que esta ocupaba.

Para borrar parte de una palabra, hay que colocar el cursor a la derecha

de la parte a modificar, y teclear dw.

Borrar una linea

Pulsando dd se borra una linea y el espacio que esta ocupaba

Borrar parte de una linea

Para borrar todo lo que este a la derecha del cursor, basta con pulsar
D.

Para borrar todo lo que este a la izquierda del mismo basta con pulsar
d0.

Borrar hasta el final del fichero

Basta con pulsar dG, que borra desde la linea en que estaba el cursor.
Borrar desde el principio del fichero

Basta teclear d1G, que borra hasta la linea en que estaba el cursor.

COPIAR Y MOVER TEXTO- Yank, Delete y Put

De la misma manera que muchos procesadores de palabra te permiten copiar

y pegar, o cortar y pegar lineas de texto, el vi tambien incluye esta

posibilidad, mediante los comandos "yank and put" y "delete and put",

respectivamente.

Copiar lineas

Para copiar una linea son necesarios dos comandos:

yy o Y (yank)

p (debajo) o P (arriba)

Para copiar varias lineas basta con colocarse en la primera linea a copiar

y escribir el numero de lineas a copiar seguido por yy (p.e.: 10yy)

Pueden usarse los comandos p y P para pegar el texto inmediatamente antes

borrado.

AVISO: Usar solo los comandos de movimiento de cursor entre el yank o delete

y put. Si se borra o copia cualquier otro texto antes de poner el nuevo


texto

en su lugar, las lineas copiadas o borradas se perderan.

Mover lineas

Mover una o varias lineas de sitio requiere tambien dos comandos:

dd (delete) y p o P.

Igual que antes se puede teclear antes de dd el numero de lineas a mover.


Usar buffers con nombre

Para insertar repetidamente un grupo de lineas en varios lugares dentro


de un

documento, puedes copiar las lineas a un buffer con nombre. Se especifican


los

buffers con nombre escribiendo antes del comando comillas dobles y su


nombre.

Ej:

copiar 4 lineas al buffer a--> "a4yy

copiar 10 lineas al buffer b--> "b10yy

pegar las lineas del buffer a --> "ap o "aP

pegar las lineas del buffer b --> "bp o "bP

Usar un contador para comandos repetitivos

Muchos comandos del vi pueden estar precedidos de un contador que indica

cuantas veces repetir la operacion.

Muchos de los anteriores permiten contadores. P.e., 3dd repite el comando


de

borrar una linea 3 veces, 2dw borra dos palabras, y 4x borra 4 caracteres.

Tambien se pueden usar contadores para los comandos de moverse por la


pantalla,

p.e., 3w o 2Ctrl-F.

Pulsando un "." se repite la ultima operacion de cambio realizada. Por


ejemplo

si se borra una linea, y la siguiente operacion a realizar es borrar una


linea,

basta con pulsar ".".

USAR LOS COMANDOS ex

Los comandos de ex son mas seguros y convenientes que yank, delete y put
cuando
se trata de grandes bloques de texto. Mejor que contar lineas en la pantalla
y

buscar el punto de insercion, se le pueden dar a vi un rango de lineas


a mover o

copiar y entonces especificar la linea anterior al punto de insercion.

(Por supuesto, con un comando de borrado no existe punto de insercion)

Visualizar el numero de las lineas o no

Para visualizar el numero de cada linea, teclear

:set nu[return]

Para no visualizarlas, teclear

:set nonu[return]

Copiar lineas

El formato basico del comando de copiar del ex es:

:#linea,#linea co #linea[return]

donde los dos primeros numeros(separados por coma) especifican el rango


de

lineas a copiar, y el tercer numero es la linea anterior al punto de


insercion.

Se pueden usar abreviaturas para especificar los rangos de lineas:

- "." denota la linea actual.

- "$" denota el final del fichero.

Mover lineas

El formato basico del comando de mover del ex es similar al de copiar:

:#linea,#linea m #linea[return]
Borrar lineas

:#linea,#linea d[return]

BUSCAR Y REEMPLAZAR EN EL vi

vi proporciona varios modos de encontrar un string de caracteres en el

texto, asi como de reemplazarlo.

Encontrar un string

Un string es simplemente uno o mas caracteres en fila. Puede incluir letras,

numeros, puntuaciones, caracterese especiales, espacios en blanco,


tabulaciones,

o retornos de carro. Un string puede ser una palabra gramatical o puede


ser

una parte de una palabra.

Para encontrar un string, hay que teclear / seguido del string que se desea

buscar, y entonces pulsar return. El vi posiciona el cursor en la siguiente

ocurrencia del string.

Tecleando n se va a la siguiente ocurrencia del string, y pulsando N a


la

anterior.

Para buscar hacia atras en un fichero se puede usar ? en lugar de /. En


este

caso, las direcciones de n y N se invierten.

Normalmente las busquedas son case-sensitive. Si se quiere que vi ignore

mayusculas y minusculas (ignore case) durante la busqueda, teclear:

:set ic[return]

Para volver al cambio por defecto basta teclear:

:set noic[return]
Ciertos caracteres especiales(/ & ! . ^ * $ \ ?) tienen un significado
especial

para el proceso de busqueda y deben especificarse de un modo especial en


la

busqueda, precediendolos por la barra hacia atras \.

Por ejemplo, para buscar algo? hay que teclear:

/algo\?[return]

Esto es asi porque estos caracteres especiales pueden usarse como comandos
para

la funcion de busqueda.

Refinar la busqueda

Se pueden realizar busquedas mas precisas, marcando el string con


indicadores

de las siguientes caracteristicas:

. Principio de linea

. Fin de linea

. Principio de palabra

. Fin de palabra

. Comodines

Para intentar emparejar el comienzo de una linea, hay que preceder al string
a

buscar por ^.

Por ejemplo, para buscar la siguiente linea que empieza por Sin embargo,

habria que teclear:

:/^Sin embargo[return]

Para emparejar el final de una linea, hay que terminar el string a buscar
por

un simbolo $.
Por ejemplo, para buscar la siguiente linea terminada en nada., habria
que

teclear:

:/nada\.$

Para emparejar el principio de una palabra, teclear \< al principio del


string,

para emparejar el final de una palabra, teclear \> al final del string.

Por ejemplo, para buscar la siguiente ocurrencia de la palabra "nada",


no del

string, habria que teclear:

:/\<nada>\[return]

Para emparejar cualquier caracter, teclear un punto en el string en la


posicion

a emparejar.

Por ejemplo, para encontrar la siguiente ocurrencia de "disinformation"


o misin

formation, teclear:

/.isinformation

Puesto que esta es una busqueda de un string, y no de una palabra, este


patron

de busqueda puede tambien encontrar tambien palabras como


"misinformationalist"

y "disinformationism"

Para buscar caracteres alternativos en un string, poner las alternativas


entre

corchetes. El patron de busqueda /[md]string encontrara los strings que

comiencen por m o d. Por otro lado, /[d-m]string, encontrara strings que

comiencen con cualquier letra de la d a la m.

Para emparejar 0 o mas ocurrencias del ultimo caracter, teclear un


asterisco en
el string. Se pueden combinar corchetes con asteriscos para buscar por

alternativas bien definidas.

Por ejemplo, para encontrar todos los strings que comiencen con una z y
terminen

en "isinformation", teclear:

/[a-z]*isinformation[return]

Reemplazar un string

El procedimiento para reemplazar un string esta basado en los


procedimientos de

busqueda mencionados antes. Todos los caracteres especiales de


emparejamiento se

pueden usar en una busqueda-reemplazamiento.

La forma basica del comando es:

:g/string_a_buscar/s//string_reemplazado/g[return]

Por ejemplo, para reemlazar todas las ocurrencias de desinformacion por

informacion, se teclearia:

:g/desinformacion/s//informacion/g[return]

Se puede modificar este comando para parar la busqueda y hacer que el vi


pida

confirmacion antes de realizar el reemplazamiento, mediante la orden


gc(consult)

A esta orden se le responde tecleando y (yes) o n (no).

En el ejemplo anterior seria:

:g/desinformacion/s//informacion/gc[return]
Para terminar el proceso bastaria con pulsar Ctrl-C

Ir a una linea determinada

Para ir a la ultima linea de un fichero abierto, se teclea G.

Para ir a la linea n del fichero, se teclea n y a continuacion G

INSERTAR UN FICHERO EN OTRO

vi permite insertar un fichero dentro del que se esta editando. La forma


general

del comando es:

:linea# r nombrefichero

Si no se especifica un numero de linea, vi inserta el fichero en la posicion

actual del cursor.

P.e., si se quiere insertar el fichero prac.c en la linea 84 se escribiria:

:84 r prac\.c

EDITAR MULTIPLES FICHEROS

vi te permite editar multiples ficheros. Para ello, se debe grabar el


abierto

(:w[return]), y a continuacion escribir :n nuevofich[return]. Para


cambiar de

un fichero a otro hay que teclear (:n #[return])

Editar una serie de ficheros

vi nombre1 nombre2 nombre3

vi nom*

los ficheros apareceran para editar en orden alfabetico.


Copiar lineas entre ficheros

Para copiar lineas de un fichero a otro, hacer lo siguiente:

Editar el primer fichero

Salvar las lineas que se quieran con el comando yank.

Sin salir del vi, editar el fichero donde se van a insertar las lineas

:n nuevofich[return]

Usar el comando put como siempre.

ESTABLECER PARAMETROS DEL vi

vi tiene muchas variables que afectan a su comportamiento y aparencia.


Puedes

ver una lista de estas variablesd con

:set all[return]

RECUPERACION DE UNA CAIDA

Si el sistema cae, los contenidos de tu buffer estan en peligro. A menudo,

puedes recuperar parte de tu trabajo rearrancando el vi del siguiente modo:

vi -r nomfich

donde nomfich es el fichero que estabas editando en el momento de la caida.

El sistema te enviara correo despues de que el sistema arranque, diciendo

que hay una recuperacion del fichero.