Este documento pretende ser una guía para el novato en vi, al final se muestran las funcionalidades y la potencia de gvim, el cual puede ser utilizado apoyándose en el uso del ratón.
1. COMO SE INVOCA
La forma normal de invocarlo
es:
vi
<archivo_texto>
en donde <archivo_texto>
puede incluir el path necesario para ubicarlo.
Si <archivo_texto>
existe, se carga para ser editado, de lo contrario inicia un archivo
vacío con ese nombre.
2. MODOS
Existen 3 modos de edición en
vi
- ESTÁNDAR
Es el modo de arranque por defecto, en él se pueden ingresar comandos
de movimiento, borrado, búsqueda...
- EDICIÓN
Inserta o reemplaza caracteres en el texto.
- COMANDO
Es el modo que permite entrar y salir del programa, almacenar archivos
y modificar las opciones de despliegue
En las versiones antiguas de
vi no es posible realizar movimientos alrededor del texto en modo de
EDICIÓN.
En las versiones recientes de
vi como gvim, el modo de EDICIÓN permite el movimiento entre
renglones y caracteres e incluso resaltan las palabras reservadas de
varios lenguajes de programación.
En Gnu/Linux es extremadamente
útil el uso del botón de la mitad del ratón que permite copiar los
textos seleccionados, no solo para la digitación de textos sino para
el envío de comandos o la realización de búsquedas.
3. MODO DE COMANDO
Para ingresar al modo de
COMANDO debe encontrarse en modo de ESTÁNDAR y presionar la tecla
[:], luego se ingresa el comando que se desea y la tecla [Enter]
inmediatamente volverá al modo ESTÁNDAR.
Si desea cancelar el comando
presione la tecla [Esc] y volverá al modo ESTÁNDAR
3.1. COMANDOS DE USO FRECUENTE
:q
Salir de vi.
:q! Salir de vi
descartando los cambios
:x
Guardar los cambios y salir de vi. cambios realizados
:wq
Guardar los cambios y salir de vi. :w Almacenar el archivo.
:e!
Descartar los cambios y abrir de nuevo
la última versión almacenada.
:set ts <#> establece el tamaño de los tabuladores.
:colors <esquema> se utiliza en gvim, el esquema de colores puede ser personalizado o utilizar uno de los estándares: koehler, pablo, evening, elflord y otros que se pueden encontrar en el manual o presionando el tabulador.
:set ruler Se utiliza para que en la última línea aparezca el número de línea, su valor porcentual y el número de carácter en que se encuentra ubicado el cursor.
4. MODO ESTÁNDAR
En este modo es bien útil
saber que el caracter ^ se refiere al principio de la línea y $ al
final de ella.
4.1. MOVIMIENTOS
Los movimientos se pueden
realizar con las flechas del teclado o con los caracteres:
- k
Subir.
- j
Bajar.
- h
Izquierda.
- l
Derecha.
- ^,0
Inicio de línea.
- $
Fin de línea.
- w,W
Siguiente palabra (word).
- b,B
Anterior palabra (back).
- <#>|
Ir al caracter <#> de la línea.
- t<c>
Ir a la siguiente ocurrencia del caracter <c> en la
línea.
- T<c>
Ir a la anterior ocurrencia del caracter <c> en la línea.
- :<#> Ir a la línea
<#>.
- G
Final del archivo.
- <#>G
Ir a la línea <#>.
- H
Cursor al principio de la pantalla.
- M
Cursor en la mitad de la pantalla.
- L
Cursor al final de la pantalla.
- [Ctrl]
B Página anterior (Backward).
- [Ctrl]
F Página siguiente (Forward).
- %
Sobre un corchete o paréntesis busca al compañero.
- }
Avanzar un párrafo.
- {
Retroceder un párrafo.
4.2. BÚSQUEDAS
- /<cadena>
Avanza hasta la siguiente ocurrencia de <cadena>
- ?<cadena>
Avanza hasta la anterior ocurrencia de <cadena>
- n
Repite la última búsqueda de cadena en el sentido
especificado.
- N
Repite la última búsqueda de cadena en el sentido
contrario.
- ``
Vuelve a la posición del cursor antes de la búsqueda.
- /<cadena>/<#>
Avanza hasta <#> líneas después de la siguiente ocurrencia de
<cadena> (<#> puede ser negativo, muy útil para
indentación y
sustituciones)
4.3. MULTIPLICACIÓN DE
MOVIMIENTOS
Si se antepone un número a un
movimiento se multiplica éste
- <#>w,
<#>W Avanzar <#> palabras
- <#>b, <#>B
Retroceder <#> palabras
- <#>[Ctrl]
F Avanzar <#> páginas
- <#>[Ctrl] B Retroceder <#>
páginas
- <#>}
Avanzar <#> párrafos
- <#>{
Retroceder <#> párrafos
- <#>l
Avanzar <#> caracteres
- <#>h Retroceder
<#> caracteres
- <#>k
Subir <#> líneas
- <#>j Bajar <#>
líneas
Igual
con las flechas del teclado.
5. MODO DE EDICIÓN
Al ingresar uno de los
siguientes caracteres estando en el modo ESTÁNDAR se ingresa al modo
de EDICIÓN hasta el momento en que se presione la tecla [Esc].
5.1. INSERCIÓN
- a
Empieza a insertar justo después del cursor (se puede multiplicar
con <#>)
- i
Empieza a insertar justo antes del cursor (se puede multiplicar con
<#>)
- A
Empieza a insertar al final de la línea (se puede multiplicar con
<#>)
- I
Empieza a insertar al inicio de la línea (se puede multiplicar con
<#>)
- o
Nueva línea debajo de la línea actual (se puede multiplicar con
<#>)
- O
Nueva línea arriba de la línea actual (se puede multiplicar con
<#>)
5.2. SUBSTITUCIÓN
- r
Reemplaza el caracter después del cursor por el siguiente caracter
quese
digite y queda en modo estándar (se puede multiplicar con <#>).
- R
Reemplaza los caracteres de la línea por los que se digiten.
- s
Elimina un caracter y queda en modo de EDICIÓN (se puede multiplicar
con <#>s).
- S
Elimina la línea actual y queda en modo de EDICIÓN.
6. MODO ESTÁNDAR
6.1. BORRADO
- x
Elimina el caracter bajo el cursor (se puede multiplicar con <#>x).
- X
Elimina el caracter anterior al cursor (se puede multiplicar con
<#>X).
- dd
Elimina la línea actual. (se puede multiplicar con <#>dd).
Si se utiliza la secuencia:
d<comando
de movimiento>
se puede obtener el efecto del
borrado hasta el final del movimiento (incluso si se está
multiplicando el comando de movimiento):
- dw
Elimina la siguiente palabra.
- d<#>w
Elimina las siguientes <#> palabras.
- db
Elimina la anterior palabra.
- d$
Elimina hasta el final de la línea.
- d<#>b
Elimina las anteriores <#> palabras.
- d<#>G
Elimina desde la posición actual hasta la línea <#>
- d/<cadena>
Elimina hasta la siguiente ocurrencia de <cadena>
- ...
...
6.2. CAMBIOS
cc
Cambiar la línea actual (se puede multiplicar con <#>).
~
Cambiar entre mayúsculas y minúsculas (se puede multiplicar con
<#>).
Igual
que con el comando de borrado "d" el comando de cambio "c"
puede
utilizarse
combinado con comandos de movimiento.
6.3. INDENTACIÓN
- >>
Indentar la línea actual (se puede multiplicar con <#>).
- <<
Desindentar la línea actual (se puede multiplicar con <#>).
Igual que con el comando de
borrado d el comando de indentación > y < puede utilizarse
combinado con comandos de movimiento.
6.4. REPETICIÓN DE COMANDOS
Tanto los movimientos como
inserciones, eliminados, cambios e indentanciones pueden repetirse
utilizando el comando ".", igualmente el comando "."
puede multiplicarse utilizando un <#> precediéndolo.
6.5. DESHACER
u
Deshace el último comando de edición.
U
Deshace todos los comandos de edición sobre la línea
actual.
[Ctrl]
R Rehace los cambios deshechos con los comandos "u" o "U"
(solo
implementado
en nuevas versiones de vi).
6.6. MOVER Y COPIAR TEXTO
Siempre que se elimina un
texto vi lo almacena en la memoria en un "buffer especial",
adicionalmente con las teclas "y" e "Y" se puede
enviar un pedazo de texto a la memoria para ser copiado en otro lugar
del texto, igual que otros comandos puede multiplicarse
anteponiéndole un <#> o combinarlo utilizando comandos de
movimiento.
yy,
Y Copiar a memoria la línea actual (Yank).
p
Pegar el contenido de la memoria justo antes del
cursor/línea.
P
Pegar el contenido de la memoria justo después del
cursor/línea.
7. SUBSTITUCIONES
Adicionalmente, en el modo de
COMANDO, es posible indicarle a vi que realice sustituciones
utilizando expresiones regulares.
7.1. SINTAXIS
:<región>s/<exp_reg>/<cadena>/<opción>
Significado: substituya en la
<región> las ocurrencias de la <exp_reg> por la <cadena>
de acuerdo a la <opción> especificada.
<región> puede ser:
- %
todo el archivo
- <#1>,<#2>
entre la línea <#1> y la <#2>
- .
solo la línea actual
- $
solo la última línea
- .+<#>
desde la línea actual hasta <#> líneas después.
- .-<#>
desde la línea actual hasta <#> líneas antes.
- $-<#>
desde la última línea hasta <#> líneas antes.
- g/<exp_reg1>/
todas aquellas líneas que contengan la expresión regular
- <exp_reg> es una cadena
de caracteres que puede contener los siguientes caracteres
especiales:
- ^
Indica el principio de la línea.
- $
Indica el final de la línea.
- \
Se utiliza para proteger el siguiente caracter (útil para indicar caracteres
/ en las expresiones regulares).
- .
Un caracter cualquiera.
- *
Uno o mas caracteres cualquiera.
- \<
Utilizado al principio de la expresión regular indica que es el inicio
de la palabra
- \>
Utilizado al principio de la expresión regular indica que es el final
de la palabra
- [<conjunto
de caracteres>] Indica
que el caracter puede coincidir con cualquiera del conjunto de
caracteres, el cual puede ser de las siguientes formas:
- <c1><c2>...<cn>:
Todos los caracteres indicados en la lista.
- <c1>-<c2>
: Los caracteres en orden alfabetico/ascii entre
- <c1>
y <c2>.
- ^<c>
: Todos los caracteres menos <c>.
<cadena> cadena por la
cual se substituirá la expresión regular
<opción>
- Sin
opción solo reemplaza la primera ocurrencia en cada línea.
- g
Todas las ocurrencias en cada línea.
- c
Pide confirmación de la substitución.
7.2. EJEMPLOS
- :.s/gat[oa]//g
elimina cualquier ocurrencia de gato y gata en la línea
actual.
- :%s/199[0-9]//g
elimina cualquier ocurrencia de 1990, 1991, ..., 1999
- :.,$s/p[aeiou]s[oe]//g
elimina cualquier ocurrencia de paso,
peso, piso, poso, puso, pase,
pese, pise, pose, puse entre
la línea actual y el final del archivo
- :1,.s/sex[^o]//g
elimina cualquier ocurrencia de sex y un caracter que no
sea "o" desde el principio y la línea actual.
- :15,50s/casa/choza/g
substituye las ocurrencias de casa por choza entre las líneas
15 y 50.
8. Utilidades adicionales
- J
Junta en una sola línea la actual y la siguiente (se puede multiplicar
con <#>).
- [Ctrl]
G Información de la posición actual y del archivo en edición.
- [Ctrl]
L Refresca la pantalla (cuando un mensaje del sistema interrumpe el
programa)
8.1. OPCIONES DE DESPLIEGUE
- :set
nu Muestra el número de línea de cada una.
- :set
nonu Oculta los números de línea.
- :set
wrap Muestra las líneas completas en la pantalla.
- :set
nowrap Muestra únicamente la porción de cada línea que cabe en
la pantalla.
- :set
ai Habilita la autoindentación
- :set
noai Deshabilita la autoindentación
- :set
eb "error bell"
- :set
noeb ...
- :set
ic "ignore case" no distingue mayúsculas/minúsculas en
las búsquedas
- :set
noic ...
- :set
sm "show matc" cuando se digita un corchete/parentesis
indica el compañero.
- :set
nosm ...
- :set
all informa las opciones habilitadas.
8.2. CARACTERES ESPECIALES
En algunos archivos texto es
importante insertar caracteres del estilo [Ctrl] M los cuales se
pueden insertar utilizando la secuencia:
8.3. EJECUCIÓN DE COMANDOS DEL
SISTEMA
- :!<comando>
Ejecuta el comando especificado en UNIX.
- :!!<comando>
Ejecuta el comando especificado en UNIX con la línea actual como
entrada estándar (!<movimiento> envía al programa por la entrada
estándar la región de texto que cubre el movimiento).
8.4. ESPAÑOL
Al realizar documentos en
español es importante saber que si el ambiente opone resistencia
para colocar las tíldes la secuencia: [Ctrl] K ' <vocal>
genera la <vocal> tildada.
8.5. OPCIONES POR DEFECTO
En el archivo ~/.exrc se deben
colocar las opciones que el usuario desee tener por defecto,
adicionalmente el comando:
permite cargar un archivo de
texto predefinido con los comandos que se desee aplicar al archivo.
8.6. MANEJO DE ARCHIVOS
El comando para leer e
insertar un archivo insertándolo en la línea actual es
Para generar nuevos archivos
se utiliza
- :<región>
w <archivo_texto>
Si el archivo destino ya
existe hay que utilizar:
- :<región>
w! <archivo_texto> para sobreescribirlo.
- :<región>
w >> <archivo_texto> para escrbir al final del
archivo.
9. GVIM o vim-X11
Esta es una versión de vim optimizada para Xwindows que soporta el manejo del ratón, permite seleccionar con el puntero las áreas que se desean repetir o manipular. (cuando hablemos de puntero nos referiremos al puntero del mouse y cuando hablemos de cursor nos referiremos al cursor de texto que titila).
- Para seleccionar un área puedo hacer click y arrastrar el puntero, con ello selecciono el texto.
- Si hago doble-ckick se selecciona toda la palabra bajo el puntero y si arrastro el puntero tras el doble-click va seleccionando de palabra en palabra.
- Si hago triple-click: se selecciona toda la línea bajo el puntero y si arrastro el puntero tras el triple-click va seleccionando de línea en línea
- Si hago cuadruple-click y arrastro el puntero, puedo seleccionar un bloque de caracteres, es la opción más útil cuando se está codificando software.
Una vez seleccionado el bloque se pueden hacer muchas cosas, por ejemplo:
- botón medio del ratón pega bajo el puntero lo seleccionado (no importa si es en otra ventana de gvim)
- y copia la selección para pegarla en otro sitio (se usa cuando no es visible el sitio donde se desea pegar la selección, de lo contrario se hace presionando el botón medio del ratón)
- p pega el contenido seleccionado a partir de la posición del cursor.
Esto funciona incluso cuando se selecciona un bloque de caracteres con el cuadruple-click. Igualmente, al seleccionar con el cuadruple-click un bloque de texto se pueden hacer cosas como:
- c cambia todo el bloque por el texto que se digite hasta que se presione [ESC]
- r reemplaza el bloque por el caracter que se digite a continuación.
- >> indenta el bloque seleccionado
- << desindenta el bloque seleccionado
Con estas guías, y conociendo las otras funcionalidades de gvim, uno se puede poner creativo e intentar nuevas cosas, es bastante intuitivo y generalmente funciona lo que a uno se le ocurre.
Espero haya sido de utilidad esta guía, cualquier comentario que tengan o si desean que se agregue un capítulo que crean que hace falta y es de utilidad, háganmelo saber y con gusto lo añadiré.