Copyright 2005-2010 Sergio González Durán Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.
autor: sergio.gonzalez.duran@gmail.com
vi es el venerable y confiable editor de texto que
encontrarás en TODAS las distintas versiones, distribucciones, sabores
de Linux/Unix. Sumamente poderoso y complejo, con múltiples opciones y comandos
puede ser muy frustrante su uso para los principiantes o para los que no lo usan
muy a menudo. Por lo anterior, realizé la siguiente referencia que es un compendio
de sus opciones más usadas.
Donde se muestre: (dos puntos) indica que primero hay que presionar la
tecla ESC y después la tecla ':' que permite entrar al modo de comandos.
Modos
Comandos
Siempre que se inicia vi comienza en modo
de comandos, que como su nombre lo indica permite indicar comandos que ejecuten una acción específica,
como búsquedas, copiar, pegar, eliminar líneas, mover el cursor, posicionarse en partes del documento, etc.
Varios comados están disponibles directamente, con solo apretar una o dos teclas, y otros están disponibles
en el modo "last line" o última línea que se accede a ella presionando la tecla dos puntos ':' y
en seguida se indica la acción o comando a ejecutar. Para salir del modo de última línea se presiona ESC.
Inserción
En este modo es cuando se está realmente en
el documento, cuando se puede escribirlo y editarlo. Para ingresar al modo de inserción se usa uno de los
varios comandos que permiten entrar al modo de inserción (de texto), que se describen adelante en su apartado
respectivo. Estando en el modo de inserción, para regresar al modo de comandos se presiona la tecla ESC.
Iniciar vi y comandos para archivos
vi archivo
Crea o abre el 'archivo'
vi /usr/local/archivo
Crea o abre el 'archivo' en el directorio indicado
vi -r
Muestra archivos rescatados
vi -r archivo
Recupera 'archivo'
vi arch1 arch2
Abre archivos 'arch1' y 'arch2'
vi +45 archivo
Abre el 'archivo' y posiciona el cursor en el renglón 45
vi +/cadena archivo
Abre el 'archivo' y posiciona el cursor en el primer renglón donde encuentre 'cadena'
:e archivo2
Abre 'archivo2' mientras se está en un archivo
:n
Avanza al siguiente archivo abierto
:p
Avanza al archivo abierto previo
:r otroarchivo
Inserta desde la posición actual del cursor 'otroarchivo'
:r !cmdlinux
Inserta desde la posición actual del cursor la salida del comando de Linux indicado
:!cmdlinux
Se ejecuta el comando de Linux indicado
:w
Guarda el documento actual
Terminando y cerrando
:q
Termina y cierra si no hubo cambios
:q!
Termina y cierra sin grabar cambios
:wq
Termina y guarda documento
:wq nuevoarch
Termina y guarda documento con el nombre 'nuevoarch'
:x
Termina y guarda documento
Estableciendo opciones
:set
Muestra las opciones establecidas actualmente
:set all
Muestra todas las posibles opciones
:set opcion
Comienza o inicio de la opción
:set noopcion
Termina o quita la opción
:set un
Opción que permite mostrar numeración de líneas
:set noun
Quita la numeración de líneas
:set ro
read only, archivo en modo de solo lectura
:set tabstop=6
Establece el salto de tabulador a 6 espacios
Movimiento del cursor
h
Una posición a la izquierda (flecha izquierda)
l
Una posición a la derecha (flecha derecha)
k
Una línea hacía arriba (flecha arriba)
j
Una línea hacía abajo (flecha abajo)
0 (cero)
Inicio de la línea
$
Fin de la línea
w
Adelante una palabra
W
Adelante una palabra incluyendo puntuación
b
Atrás una palabra
B
Atrás una palabra incluyendo puntuación
e
Al final de la palabra actual
E
Al final de la palabra actual incluyendo puntuación
n-
Arriba n líneas, primer caracter no espacio
n+
Abajo n líneas, primer caracter no espacio
H
Primera línea de la pantalla actual
M
Línea a mitad de la pantalla actual
L
ültima línea de la pantalla actual
Movimientos de paginación (Presionar <ctrl.> (^) y la tecla indicada)
^F
Adelante una pantalla
^B
Atrás una pantalla
^D
Adelante media pantalla
^U
Atrás media pantalla
1G
Moverse a la línea 1
nG
Moverse a la línea n
G
Moverse a la última línea
Insertando texto (modo de inserción)
a
Inserta texto después del cursor
A
Inserta texto al fineal de la línea actual
i
Inserta texto antes del cursor
I
Inserta texto antes del primer caracter no espacio de la línea actual
o
Abre una nueva línea después de la actual
O
Abre una nueva línea antes de la actual
r
Remplaza el caracter actual
R
Remplaza el caracter actual y los siguientes hasta presionar ESC o terminar la línea
Modificando texto
x
Borra el caracter actual
X
Borra el caracter antes del cursor
nx
Borra n caracteres
dd
Borra la línea actual
ndd
Borra n líneas
dw
Borra la palabra actual
ndw
Borra n palabras
D
Borra desde el cursor hasta el final de la línea
dL
Borra desde el cursor hasta el final de la pantalla
dG
Borra desde el cursor hasta el final del documento
cw
Reemplaza la palabra actual con nuevo texto
J
Junta la línea actual con la siguiente
~ (tilde)
Cambia may/min del caracter actual
u
Deshacer el último cambio de texto
U
Deshacer los cambios en la línea actual
. (punto)
Repite el último cambio de texto
>>
Mueve la línea actual a la derecha un tabulador
<<
Mueve la línea actual a la izquierda un tabulador
Buscando y reemplazando texto (en modo de comandos)
/texto
Busca texto hacía adelante en el documento
?texto
Busca texto hacía atrás en el documento
n
Repite búsqueda a la siguiente ocurrencia
N
Repite búsqueda a la siguiente ocurrencia, invierte dirección
:s/viejo/nuevo
Sustituye la primera ocurrencia
de 'viejo' a 'nuevo' en la línea actual
:s/viejo/nuevo/g
Sustituye todas las ocurrencias
de 'viejo' a 'nuevo' en la línea actual
:%s/viejo/nuevo/g
Sustituye todas las ocurrencias
de 'viejo' a 'nuevo' en todo el documento
:s/viejo/nuevo/g/c
Sustituye todas las ocurrencias
de 'viejo' a 'nuevo' en todo el documento y pregunta por confirmación
&
Repite el último comando de sustitución 's'
Copiar y pegar texto
Y
Copia la línea actual
yy
Copia la línea actual
nyy
Copia n líneas desde la actual
yw
Copia la palabra actual
p
Pega después del cursor
P
Pega antes del cursor
Números y rangos
Números
Prácticamente todos los comandos
soportan el ser precedidos por un número que repetira el comando el número de veces indicado. Ejemplos:
5h (mueve el cursor 5 posiciones a la izquierda)
10yw (Copia las siguientes 10 palabras)
15dd (Elimina los siguientes 15 renglones)
4X (Elimina los cuatro caracteres previos del cursor)
Rangos
Prácticamente todos los comandos en modo
de última línea (: dos puntos) soportan el ser precedidos por un rango de líneas que repetira el comando en las líneas (inclusive)
indicadas. Ejemplos:
:3,10d (Borra las líneas de la 3 a la 10)
:.,20yy (Copia de la línea actual (. punto) a la 20)
:.,$s/viejo/nuevo/g (Busca y reemplaza la cadena 'viejo' por 'nuevo' desde la línea actual a la última ($))
:%s/viejo/nuevo/g/c (Busca y reemplaza la cadena 'viejo' por 'nuevo' en todo el documento y pide por confirmación, % es equivalente a 1,$)
Dividir ventanas (No hay límite de ventanas)
:split
Divide el documento en dos ventanas horizontales con el mismo
archivo y las mismas líneas en cada ventana
:vsplit
Divide el documento en dos ventanas verticales con el mismo
archivo y las mismas líneas en cada ventana
:split archivo2
Divide el documento en dos ventanas horizontales
con el archivo inicialmente cargado en una ventana y el 'archivo2' en la otra
:8split archivo2
Divide el documento en dos ventanas horizontales
con el archivo inicialmente cargado en una ventana y el 'archivo2' en la otra con una altura de 8 líneas.