Manual de vi

Autor:
Ricardo Naranjo Faccini
Fecha de publicación:
Thursday 08 February 2001
Tema:
FOSS y Software Libre
Revisado por :
Ricardo Naranjo Faccini
(Friday 04 October 2013)

Resumen

vi es un poderoso y ágil editor de texto, el preferido por muchos desarrolladores de software gracias a su potencia para el manejo de expresiones regulares para búsqueda y reemplazos, evita despegar las manos del teclado para realizar operaciones complejas.

Sin embargo vi no es para cualquiera, vi es para personas que requieren del poder de los editores de texto para programar o para manejar archivos de texto en su vida diaria.  La curva de aprendizaje es muy lenta, pero una vez se adquieren las bases para su manejo, JAMAS se utilizará otro editor de texto.


1.1. COMO SE INVOCA

La forma normal de invocarlo es:

vi

en donde puede incluir el path necesario para ubicarlo.

Si existe, se carga para ser editado, de lo contrario inicia un archivo vacío con ese nombre.

1.2. MODOS

Existen 4 modos de edición en vi

  • NORMAL 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, almacenararchivos y modificar las opciones de despliegue
  • VISUAL o selección, Es el modo que permite seleccionar un bloque de caracteres para realizar operaciones en él.

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.

1.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

1.3.1. COMANDOS DE USO FRECUENTE

  • :q Salir de vi. :q! Salir de vi descartando los
  • :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.
  • :<#> Ir a la línea <#>.

1.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.

1.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 Ir a la siguiente ocurrencia del caracter en la línea.
  • T Ir a la anterior ocurrencia del caracter en 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.

1.4.2. BÚSQUEDAS

  • / Avanza hasta la siguiente ocurrencia de
  • ? Avanza hasta la anterior ocurrencia de
  • 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.
  • //<#> Avanza hasta <#> líneas después de la siguiente ocurrencia de (<#> puede ser negativo, muy útil para indentación y sustituciones)

1.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.

1.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].

1.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 <#>)

1.5.2. SUBSTITUCIÓN

  • r Reemplaza el caracter después del cursor por el siguiente caracter que se 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.

1.6. MODO ESTÁNDAR

1.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<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/ Elimina hasta la siguiente ocurrencia de
  • ... ...

1.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.

1.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.

1.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.

1.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).

1.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.

1.7. SUBSTITUCIONES

Adicionalmente, en el modo de COMANDO, es posible indicarle a vi que realice sustituciones utilizando expresiones regulares.

1.7.1. SINTAXIS

:s<rango>/<expresion regular>/<patrón de cambio>/<opciones>

Significado: substituya en el rango la las ocurrencias de expresión regular la por el patron de cambio de acuerdo a la especificada.

<rango> 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// todas aquellas líneas que contengan la expresión regular

<expresion regular> es una cadena de caracteres que puede contener, entre muchos otros, 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
  • [] Indica que el caracter puede coincidir con cualquiera del conjunto de caracteres, el cual puede ser de las siguientes formas:
    • ...: Todos los caracteres indicados en la lista. i.e. [aeiou] para sólo las vocales.
    • <inicial>-<final>: Los caracteres en orden alfabetico/ascii entre <inicial> y <final>. i.e. [a-fA-F] para letras mayúsculas o minúsculas entre la a y la f
    • ^<caracter> : Todos los caracteres menos el indicado. i.e. [^<] coincide con el siguiente caracter que no sea <

<patron de cambio> es la cadena por la cual se substituirá la expresión regular, puede utilizar & para repetir la <expresión regular> encontrada y otros operadores más avanzados para repetir partes de la expresión regular.

<opciones>

  • 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.

1.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.

1.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)

1.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.

1.8.2. CARACTERES ESPECIALES

En algunos archivos texto es importante insertar caracteres del estilo [Ctrl] M los cuales se pueden insertar utilizando la secuencia: [Ctrl] V

1.8.3. EJECUCIÓN DE COMANDOS DEL SISTEMA

  • :! Ejecuta el comando especificado en UNIX.
  • :!! Ejecuta el comando especificado en UNIX con la línea actual como entrada estándar (! envía al programa por la entrada estándar la región de texto que cubre el movimiento).

1.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 ' genera la tildada.

1.8.5. OPCIONES POR DEFECTO

En el archivo ~/.exrc o ~/.vimrcse deben colocar las opciones que el usuario desee tener por defecto

Adicionalmente el comando: :source permite cargar un archivo de texto predefinido con los comandos que se desee aplicar al archivo.

1.8.6. MANEJO DE ARCHIVOS

El comando para leer e insertar un archivo insertándolo en la línea actual es

  • :r

Para generar nuevos archivos se utiliza

  • :w

Si el archivo destino ya existe hay que utilizar:

  • :w! para sobreescribirlo.
  • :w >> para escrbir al final del archivo.

más información:

Ricardo Naranjo Faccini

Ricardo Naranjo Faccini Desarrollador WWW

Nació en Barranquilla, Atl, Colombia el 14 de enero de 1971

  • Magíster en Ingeniería de Sistemas y Computación de la Universidad de Los Andes 1998
  • Ingeniero Civil de la Universidad de Los Andes 1995
  • Diplomado en docencia en Ingeniería de la Pontificia Universidad Javeriana 2008
  • Gerente de la firma Skina IT Solutions, su gestión ha llevado a la empresa al nivel de exportación de software. Experto en calidad en el desarrollo de software con énfasis en el uso de herramientas libres orientadas hacia WWW.
  • CTO de AuthorsGlobe, empresa participante en el MIT 100K, elegida como parte del "TOP 10" entre 300 proyectos presentados en este concurso del Massachussets Institute of Technology MIT.
  • Durante el periodo 2004-2005 se desempeñó como Gerente de desarrollo de negocios NOVELL en Nexsys de Colombia.
  • Ejerce docencia como catedrático en la Universidad Javeriana, al igual que lo ha realizado en la Universidad de Los Andes, Universidad de Manizales y Universidad autónoma de Bucaramanga.
  • Comprometido con la divulgación del software libre y su aplicación en Colombia, ha dictado más de 60 conferencias en todo el país, co-fundador de LinuxCol, la primera comunidad de usuarios de Linux en Colombia.
  • Colaborador del grupo ACIS-Linux.

Calle 95 #47-33 int 8

Calle 95 #47-33 int 8, Bogotá, Colombia

Tel: +57 300 214 6210

ventas@skinait.com

Desarrollado por Skina IT Solutions