Introducción
vi (visual editor) es un editor de texto realizado originalmente por William Joy para la versión de UNIX de la universidad de Berkeley: BSD. Posteriormente este potentísimo editor se incorporó al System V de AT&T convirtiéndose en herramienta estándar.
Vim (vi Improved) es un moderno editor de GNU compatible con vi pero con muchas funcionalidades añadidas, entre otras 'deshacer' multinivel, multiventanas, multibuferes, coloreado de sintaxis, autocompletado de nombres de ficheros, ayuda en línea, apertura de directorios... Normalmente en los sistemas que disponen de Vim existe un enlace llamado vi para que esté disponible como tal.
El éxito de vi se debe a varios factores. El primero es que vi es un editor pensado para utilizar en pantalla completa; hay que tener en cuenta que antes los editores de texto solo mostraban la línea que estabas editando. De hecho vi está basado en el editor de líneas ex y se puede alternar entre un editor y otro mientras se trabaja o ejecutar comandos de ex en vi.
El segundo valor que popularizó vi es que todos sus comandos se realizan con el teclado alfanumérico permitiendo su uso indiscriminado entre terminales con distintas configuraciones. Así por ejemplo para mover el cursor no se utilizaban las flechas del teclado sino las letras h(izq)-j (abj)-k(arr)-l(der), aunque hoy día permite los dos sistemas. De nuevo hay que tener en cuenta que hasta el System V no existía apenas compatibilidad entre los distintos UNIX.
Hoy día los principales valores de vi son su universalidad (disponible en todos los sistemas UNIX/GNU), su eficiencia (es ligero y usa poca memoria) y sobre todo su potencia (no conozco nadie que sepa utilizar todas sus funciones, siempre se aprende alguna nueva). Esta potencia viene de la distinción entre modo comando y modo edición y en la versatilidad de los comandos; todos, por sencillos que parezcan, pueden combinarse con repeticiones, marcas, rangos de líneas y/o expresiones regulares e ir complicándose cuanto se desee, con gran versatilidad.
vi, como veremos, es un editor díficil de aprender, pero fácil de utilizar.
A lo largo del texto empezaremos con versiones sencillas de los comandos e iremos complicando los ejemplos como muestra de lo que se puede hacer.
Generalidades
Para aprender a utilizar vi es bueno tener en cuenta dos cosas muy importantes.
La fundamental, por hacerlo diferente a los demás editores, es que vi tiene dos modos básicos de funcionamiento, el modo comando y el modo edición (inserción o sustitución).
Cuando abrimos un fichero con vi (vi nombre_fichero) comenzamos en modo comando. Esto quiere decir que no podemos escribir. La primera sorpresa de un usuario novel con vi será que si empieza a escribir no aparecerá el texto. Es más, seguramente empiecen a ocurrir cosas 'raras' (se están ejecutando comandos).
También hay que tener en cuenta que los comandos distinguen entre mayúsculas y minúsculas. No es lo mismo el comando 'j' que el comando 'J'; no es lo mismo el comando 'p' que el comando 'P'; etc.
Para encontrar todas las funciones disponibles de vi puedes utilizar el comando 'man vi'.
Iniciando vi
El modo de iniciar vi es:
vi [opciones] [nombres_fichero]
Ejemplos:
vi prueba -- abrirá el fichero prueba o lo creará si no existe.
vi -- iniciará el editor vi creando un fichero nuevo aún sin nombre
vi -R prueba -- abrirá el fichero prueba en modo 'solo lectura'
Otro modo de invocar vi es con view que equivale a vi -R e implica 'solo lectura'.
En algunos sistemas también se puede llamar a vedit que equivale a vi con los modos 'novice', 'showmode' y 'nomagic' activos.
Para el resto del manual supondré que el lector dispone mientras lo lee de un sistema con el editor vi para ir realizando los ejercicios que se comentan.
Ejecute 'vi prueba'.
El editor limpiará la pantalla. La primera línea aparece en blanco con el cursor. La última línea es la línea de estado en la que aparecerá "prueba" [New file]. Las demás líneas aparecen con el caracter '~' que indica que en esas líneas no hay ningún texto (líneas tras el final del fichero).
Modo comando (introducción)
Como ya se ha comentado al lanzar el editor comenzamos en 'modo comando'. Esto quiere decir que vi interpretará nuestras pulsaciones como mandatos, no como texto.
Por ejemplo pulse 'Ctrl+g' (tecla control y a la vez la tecla ge). El editor nos informará en la línea de estado sobre el fichero. En nuestro caso mostrará:
"prueba" line 1 of 1 --100%--
Otra de las cosas que podemos hacer es utilizar los comandos del editor en línea ex, paras ello utilizamos ':' (dos puntos).
Por ejemplo, pulse ':' después 'q' (quit) e INTRO -en adelante ':q'- con lo que finalizaremos la sesión de trabajo del editor 'vi'.
Recuerde que en los comandos de ex (precedidos por ':') necesita pulsar INTRO ya que generalmente admiten parámetros, mientras que en los comandos 'visuales' se ejecutan inmediatamente (no necesita pulsar INTRO).
Modo edición (introducción)
Volvamos a vi (ejecute 'vi prueba').
Pulsemos simplemente la tecla 'i' (significa insert). En apariencia no pasará nada ya que vi no indica el modo en que nos encontramos. Sin embargo en este momento vi interpretará nuestras pulsaciones como texto, no como mandatos, con las siguientes excepciones:
INTRO -- Comienza una nueva línea
BACKSPACE -- Borra el carácter anterior
CTRL-W -- Borra la palabra anterior
CTRL-U -- Borra la línea actual
CTRL-V -- Permite la inserción de caracteres especiales (INTRO, ESC...)
Escriba:
Aquel que luche con monstruos INTRO
que procure no convertirse en un monstruo él mismo; INTRO
que tenga cuidado aquel que mire al abismo, INTRO
pues el abismo le devolverá la mirada. INTRO
F. Nietzsche
Para finalizar el modo inserción pulse ESC (tecla Escape).
La tecla ESC
El principal uso de la tecla ESC es finalizar el modo edición para volver al modo comando. Además se utiliza para cancelar un comando a mitad.
En todo caso con dos pulsaciones de la tecla ESC nos encontraremos en modo comando y sin ningún comando a medias. Si ya se encuentra en modo comando sin ningún comando que cancelar y pulsa ESC, vi le avisará emitiendo un breve pitido.
Ante la duda pulse dos veces ESC y se encontrará en el modo comando.
Una vez en modo comando pruebe a pulsar ':q' vi le responderá con:
No write since last change (:quit! overrides)
y no finalizará su sesión de trabajo.
vi le avisa que no ha guardado (escrito) el fichero tras los últimos cambios y también le indica como 'sobrepasar' los avisos.
! indica imperativo, y su significado lo veremos un poco más adelante.
Pulse ':' después 'w' (write) e INTRO -en adelante ':w'-. vi responde:
"prueba" [New file] 5 lines, 178 characters
Ahora el fichero prueba se ha creado realmente en el sistema de ficheros y contiene nuestra cita.
Desplazamiento (introducción)
Para desplazarnos por el texto debemos estar en modo comando. Podemos utilizar indistintamente las flechas de cursor o las letras h(izq)-j (abj)-k(arr)-l(der).
También puede utilizar SPACE para avanzar y BACKSPACE para retroceder.
Desplácese hasta el comienzo del texto.
El imperativo !
Ahora pulse 'i' y a continuación escriba:
"Cita: INTRO"
Y pulse ESC. Pulse luego ':q' y como antes vi responde
No write since last change (:quit! overrides)
Ahora pulse ':q!'. Al hacerlo saldrá de vi sin guardar los últimos cambios.
El imperativo también se usa para otros casos, como por ejemplo sobreescribir ficheros existentes o salir sin haber editado todos los ficheros abiertos (estos temas se verán más adelante).
Configurando vi
Se puede alterar el funcionamiento estándar de vi. Para ello pueden utilizarse ficheros de configuración cuyo nombre y ubicación puede variar según el sistema. Los más habituales son .vimrc .viminfo .virc .exrc...
Además puede utilizarse, por supuesto, el modo comando.
Por ejemplo con ':showmode' vim nos indicará si estamos en modo comando (no indica nada) modo inserción (insert mode) o modo sustitución (replace mode). Estos dos últimos son variantes del modo edición.
También se puede utilizar ':set number' para ver a la izquierda del texto el número de línea (útil para programar). Se quitan con ':set nonumber'.
En caso de tener activado el coloreado de sintaxis puede ser util ':set background=dark' o ':set background=light'
Desplazamiento (movimientos más rápidos)
Además de utilizar para mover el cursor las teclas vistas, podemos utilizar las siguientes:
+ -- Inicio de la línea siguiente
0 (cero) -- Inicio de la línea actual
$ -- Final de la línea actual
- -- Inicio de la línea anterior
^F -- Página (pantalla) siguiente
^B -- Página (pantalla) anterior
H -- Línea superior de la pantalla
M -- Línea del centro de la pantalla
L -- Línea inferior de la pantalla
b -- comienzo de palabra anterior
w -- comienzo de palabra siguiente
e -- siguiente final de palabra
xG -- Línea x del texto, siendo x un número de línea
G -- Última línea del texto
Algunas consideraciones sobre el texto
vi distingue entre:
palabras -- caracteres separados por espacios, tabuladores o saltos de línea
expresiones -- igual a las palabras pero considerando caracteres especiales (man vi para más información)
sentencias -- caracteres entre los signos '.' (punto), '?' (interrogación) y '!' (exclamación) o saltos de línea
líneas -- texto entre dos saltos de línea (INTRO)
párrafos -- texto separado por líneas en blanco.
Además el final de fichero también termina todas ellas.
Principalmente los comandos de vi trabajan con palabras y líneas. Es importante tener en cuenta que una línea de texto puede ocupar más que el ancho de pantalla. En este caso vi nos la mostrará en varias líneas de pantalla, pero seguirá considerándose una única línea de texto.
Pulse ':set number' para que le muestre los números de línea.
Pulse '1G' para situar el cursor al principio del texto. Pulse 'i' y escriba:
Esta es una línea larga de texto que ocupa más que el ancho de la pantalla, por lo que el editor me la mostrará en varias líneas de pantalla, siendo solo una línea de texto. INTRO
ESC
El texto queda como sigue:
1 Esta es una línea larga de texto que ocupa más que el ancho de la pantalla, por lo que el editor me la mostrará en varias líneas de pantalla, siendo solo una línea de texto.
2 Aquel que luche con monstruos
3 que procure no convertirse en un monstruo él mismo;
4 que tenga cuidado aquel que mire al abismo,
5 pues el abismo le devolverá la mirada.
6 F. Nietzsche
Teclee '1G' para situarse al principio del texto y después pulse '^G' (Ctrl+g). El editor mostrará:
"prueba" line 1 of 6 --16%--
También puede pulsar varias veces '+' y '-' para comprobar que el nuevo texto es una sola línea de texto, aunque se muestre en dos líneas de pantalla.
Pulse ':set nonumber' para que desaparezcan los números de línea.
Borrando texto
Estando en modo comando, el modo simple de borrar es utilizar:
x -- borra el carácter indicado por el cursor
X -- borra el carácter anterior al indicado por el cursor
D -- borra desde el carácter indicado por el cursor hasta el final de línea
dd -- borra la línea indicada por el cursor
El comando 'd' (delete) borra desde el carácter indicado por el cursor hasta lo indicado por el siguiente comando de desplazamiento. Así:
dw -- borra hasta el comienzo de palabra siguiente
db -- borra hasta el comienzo de palabra anterior
dxG -- borra hasta la línea x del texto, siendo x un número de línea
dG -- borra hasta la última línea del texto
d$ -- borra hasta el final de línea (equivale a 'D')
etc.
Estando al principio del texto pruebe a borrar algunos caracteres y un par de palabras. Por último borre toda la línea con 'dd'.
Modo edición (un poco más)
Hasta ahora solo hemos visto el modo más sencillo de insertar texto con el comando 'i'. Este comando permite insertar delante del texto indicado por el cursor. Sin embargo existen multitud de comandos para cambiar al modo edición, distinguiendo entre modo inserción (el texto que escribimos se añade al existente) y modo reemplazo (el texto que escribimos sustituye a texto existente).
Los comandos principales son:
a (append) -- permite insertar texto detrás del texto indicado por el cursor.
I (Insert) -- permite insertar texto al inicio de la línea indicada por el cursor.
A (Append) -- permite insertar texto al final de la línea indicada por el cursor.
o -- añade una línea después de la actual y permite insertar texto.
O -- añade una línea antes de la actual y permite insertar texto.
r (replace) -- sustituye el carácter indicado por el cursor por otro carácter. (No hace falta pulsar ESC para volver al modo comando).
R (Replace) -- permite sobreescribir el texto a partir del carácter indicado por el cursor.
s (substitute) -- sustituye el carácter indicado por el curso por el texto introducido.
S (Substitute) -- sustituye la línea indicada por el cursor por el texto introducido.
C (Change) -- sustituye desde el carácter indicado por el cursor hasta el final de línea.
El comando 'c' (change) cambia el texto desde el carácter indicado por el cursor hasta lo indicado por el siguiente comando de desplazamiento. Así:
cw -- cambia hasta el comienzo de palabra siguiente
cb -- cambia hasta el comienzo de palabra anterior
cxG -- cambia hasta la línea x del texto, siendo x un número de línea
cG -- cambia hasta la última línea del texto
c$ -- cambia hasta el final de línea (equivale a 'C')
etc.
Teclee '1G' para situarse al principio del texto y después pulse 'o' y escriba 'puede salir escaldado' y pulse ESC.
Después pulse 'O' y escriba 'cuidado porque' y pulse ESC. Ahora pulse 'I' y escriba 'tenga mucho' y ESC.
El texto habrá quedado como sigue:
Aquel que luche con monstruos
tenga mucho cuidado porque
puede salir escaldado
que procure no convertirse en un monstruo él mismo;
que tenga cuidado aquel que mire al abismo,
pues el abismo le devolverá la mirada.
F. Nietzsche
Otros comandos útiles
Uno de los comandos más útiles en cualquier editor es el comando 'deshacer' (undo).
En vi el comando 'u' deshace el último cambio. Si se vuelve a pulsar 'u' deshace la acción de deshacer, es decir pulsar 'uu' hace que el texto quede igual.
Pulse 'u' y desaparecerá 'tenga mucho' en la segunda línea. Vuelva a pulsar 'u' varias veces para comprobar su efecto.
Vim tiene 'deshacer multinivel' lo que permite, según la configuración, que al pulsar varias veces 'u' se deshagan los últimos cambios que se han ido realizando.
El comando 'J' elimina el salto de línea de la línea actual. De este modo une la línea siguiente al final de la línea actual.
El comando ':w' escribe (guarda) el texto actual. También se puede utilizar ':w nombre_fichero2' con lo que guardará el texto en el fichero nombre_fichero2 (aunque seguiremos trabajando con nombre_fichero). ':2,5w nombre_fichero2' guarda las líneas 2 a 5 en nombre_fichero2.
También se puede combinar el comando ':w' con el comando ':q' escribiendo ':wq'.
El comando ':x' equivale a ':wq' (guardar los cambios y salir).
El comando ':r nombre_fichero3' lee el fichero nombre_fichero3 y lo escribe después de la línea indicada por el cursor. ':5r nombre_fichero3' lo inserta en la línea 5.
^g (Ctrl+g) -- muestra información sobre el fichero, así como el número de línea
(muy útil para desplazarse a una línea copiar desde donde estamos hasta la línea x, etc.)
^l (Control+l (ele)) -- redibuja la pantalla. Muy útil cuando el terminal hace que el scroll del texto monte las líneas y ya no sabes si lo que ves es realmente lo que pone
Repeticiones de comandos
Una de las posibilidades más versátiles de vi es la repetición de cualquiera de sus comandos. Hay dos modos básicos de hacerlo. A posteriori:
. (punto) -- repite el último comando de modificación del texto
Este último comando puede haber sido cambiar una palabra por una frase, añadir un texto a final de línea, borrar un párrafo, insertar una tabulación...
A priori, podemos pulsar un número antes de ejecutar un comando y éste se repetirá tantas veces como hayamos indicado.
Ejemplos:
5+ -- nos llevará al inicio de la 5a línea después de la indicada por el cursor.
3dd -- borrará 3 líneas
3J -- unirá tres líneas
8ilaESC -- insertará 8 veces 'la' (insertará 'lalalalalalalala')
2s(texto)ESC -- sustituye dos caracteres por el texto introducido
2cw(texto)ESC -- sustituye dos palabras por el texto introducido
Para tabular un texto:
(En la primera línea) i TAB ESC (tabulamos la primera línea)
+ . (tabula la segunda línea)
+ . (tabula la tercera línea)
...
Si queremos borrar de una lista las dos primeras columnas (palabras):
2dw (borramos las 2 primeras palabras de la primera línea)
+ . (segunda línea)
...
Trabajando con varios ficheros
vi permite trabajar con varios ficheros a la vez. Para ello se puede llamar al editor indicando los ficheros que desea abrir. Ejemplos:
vi nombre_fichero1 nombre_fichero2
vi nombre_fichero*
:n (':' y 'n' (next)) -- pasa al siguiente fichero
:rew (rewind) -- vuelve al primer fichero
Si hemos modificado el fichero con que estamos trabajando después del último guardado vi nos avisará. De nuevo podemos 'sobrepasar' los avisos. Así ':n!' abrirá el siguiente fichero descartando los cambios no guardados.
Una cómoda alternativa al movimiento entre ficheros es configurar:
nnoremap <C-N> :next<CR>
nnoremap <C-P> :prev<CR>
Lo que permite moverse pulsando Ctrl+N y Ctrl+P
Marcadores
En textos largos puede ser útil insertar marcas (invisibles) en el texto. Se pueden utilizar 28 marcadores nominados de la 'a' a la 'z'. Estos marcadores se pueden utilizar en cualquier orden.
m<letra> -- asigna la marca 'a' al carácter indicado por el cursor
`<letra> (apóstrofe letra)-- desplaza el curso hasta la marca <letra>
'<letra> (comilla letra)-- desplaza el curso hasta el inicio de línea que contiene la marca <letra>
Cuidado con las marcas aeiou, ya que al buscarlas -según la configuración de terminal que tengamos- vi podría entender àèìòù en vez de `a`e`i`o`u.
Copiar, cortar, pegar...
vi dispone de 28 'bufferes' nominados de la 'a' a la 'z'. Se pueden utilizar los bufferes en cualquier orden. Estos 'buferes' son independientes de las marcas.
Además dispone de un buffer general no nominado. Cada vez que se realiza un borrado, el texto pasa a ese buffer general y el texto puede ser 'pegado'. Este buffer es el utilizado por el comando 'u' (undo).
p -- pega el contenido del buffer general después del cursor
P -- pega el contenido del buffer general antes del cursor
yy (yank) -- copia la línea indicada por el cursor en el buffer general
dd -- borra la línea indicada por el cursor (como ya se ha explicado) y la pasa al buffer general
"<letra>nyy (comillas dobles <letra> número yy) -- copia n líneas a partir del cursor en el buffer <letra>
"<letra>ndd -- corta n líneas a partir del cursor al buffer <letra>
"<letra>nYY -- añade n líneas a partir del cursor al buffer <letra>
"<letra>nDD -- añade n líneas a partir del cursor al buffer <letra>
"<letra>p -- pega el contenido del buffer <letra> después del cursor
"<letra>P -- pega el contenido del buffer <letra> antes del cursor
Como se puede ver, el comando 'y' (yank) funciona igual que el comando 'd' (delete), permitiendo combinaciones como 'y$' o incluso -utilizando marcas- ' "dy`s ' (copia en el buffer 'd' el texto desde el carácter indicado por el cursor hasta el carácter indicado por la marca 's').
Otro modo más simple es utilizar los comandos mover y transferir:
:<n1>m<n2> -- Mueve (corta) la línea n1, a la línea n2
:<n1>,<n2>m<n3> -- Mueve (corta) el rango de líneas n1-n2, a la línea n3
:<n1>t<n2> -- Transfiere (copia) la línea n1, a la línea n2
:<n1>,<n2>t<n3> -- Transfiere (copia) el rango de líneas n1-n2, a la línea n3
Realizando búsquedas
/(texto) -- busca (texto) a partir del cursor hacia delante
?(texto) -- busca (texto) a partir del cursor hacia atrás
n -- va a la siguiente aparición de (texto) -en el sentido de búsqueda
N -- vuelve a la aparición anterior de (texto) -contra el sentido de búsqueda
En las búsquedas se pueden utilizar expresiones regulares y códigos especiales (con ^V).
vi soporta algunos caracteres especiales: $ . * [ ] ^ \.
Vaya a la segunda línea con '2G' y teclee '/que' e INTRO. El cursor se desplazará al 'que' de 'porque' en la segunda línea, donde nos encontramos. Si pulsa 'n' varias veces el cursor irá de un 'que' a otro pasando al de 'Aquel' en la primera línea tras el de 'aquel' en la quinta línea (última aparición en el texto).
Buscar y sustituir
Como ya vamos conociendo los modificadores de los distintos comandos, para aprender el comando sustituir podemos la definición completa:
:[rango]s/buscar/sustituir/[cgi]
[rango] especifica el rango de líneas donde queremos realizar la búsqueda, incluyendo números y los símbolos '$' que indica el final del fichero, '.' que indica la situación actual del cursor , '%' que indica el fichero actual. También podemos especificar un desplazamiento respecto a la situación actual con +n, donde n especifica el número de líneas que queremos desplazarnos.
Ejemplos:
:1,5s/viejo/nuevo/ que especifica realizar la sustitución desde las líneas 1 a la 5.
:.,$s/viejo/nuevo/ que especifica realizarla desde la posición actual hasta el final del fichero.
:.,+5s/viejo/nuevo/ que la realiza desde la posición actual hasta 5 líneas más adelante.
Las opciones [cgi] nos permitirán especificar:
c hace que vi pida una confirmación de la sustitución
g indica que la búsqueda se realizará para todas las ocurrencias dentro de una misma línea (lo común)
i hace que la búsqueda sea insensible a mayúsculas.
Como era de esperar, podemos utilizar expresiones regulares en las búsquedas, de tal forma que utilizando \( y \) para utilizar secuencias podremos realizar cosas realmente complicadas.
El ejemplo chungo (si realiza comandos como este ya es un gran usuario de vi):
:g/\(Bar\)\(celona\)/s/\2/\1na/g cambiará en todo el fichero Barcelona por Barna (porque \1 indica el primer elemento y \2 indica el segundo).
Otras funcionalidades
El comando ':!cmd' ejecutará el comando externo cmd. También podremos utilizar :sh para ejecutar una shell. Desde dentro de esta shell podremos volver a correr el vi si es necesario, pero entraremos en otra sesión de vi. Esto es particularmente útil si estamos editando un Makefile y diferentes ficheros de configuración cuando intentamos compilar un programa. La ventaja con respecto a ':e' es que no es necesario grabar lo que estamos haciendo, y ademas el fichero estará allí donde lo dejamos al salir de la shell que hemos abierto. De todas formas, no deja de ser altamente recomendable grabar antes de abrir la nueva shell... nunca se sabe.
:map <lhs> <rhs> -- genera la macro <lhs> consistente en <rhs>
<lhs> tendrá como máximo 10 caracteres y <rhs> tendrá como máximo hasta 100. Con esto conseguiremos que cada vez que escribamos <lhs> a se remplazará con <rhs>. Todas las macros han de comenzar en modo comando, pero pueden terminar en cualquier modo que deseemos. No olvide utilizar ^V antes de utilizar cualquier código de control.
:unmap <lhs> -- borra la macro <lhs>
:map! <lhs> <rhs> -- genera la macro de modo edición <lhs> consistente en <rhs>
al escribir <lhs> en modo edición, se traduzca por <rhs>
Si <lhs> es #n siendo n un dígito de 0 a 9, asignaremos la macro a la tecla de función correspondiente.
Otro modo de abreviar texto es:
:ab corto largo -- cada vez que escriba 'corto' vi lo traducirá por 'largo'
:una corto -- elimina esta abreviación
Identación en vi
Para desactivar la identación autom´tica hay que anular los 4 tipos de identación:
set noautoindent, nocindent, nosmartindent, noindentexpr
Para identar con espacios (4 en el ejemplo) en vez de tabuladores:
set sw=4
O alternativamente, para marcar los espacios que debe ocupar cada tab:
set tabstop=4
vi en la línea de comandos
Algunos shell pueden configurarse para utilizar el histórico de comandos con un editor como Emacs o, por supuesto, vi.
Si está configurado vi descubrirá que tras pulsar ESC (para pasar a modo comando) se puede utilizar '+' y '-' para ver aparecer en la línea de comandos las instrucciones anteriores. Para modificarlas hay que utilizar los comandos de edición tales como 'cw' o 'A'. Pero no solo eso, también está disponible la búsqueda ('/tftp'), el borrado, etc.
Y muchas más funcionalidades. Consulte 'man vi' o busque manuales en internet y siempre encontrar funcionalidades nuevas. ¡Disfrute!
Referencias:
Páginas del manual de vi (HP-UX) y vim (GNU).
FAQ de vi en TLDP
Manual de vi de Carlos Lizarraga
Realizado por Güimi (LMAA) - Mayo 2004.
|