- Introducción
- Vi/Vim
-
- 2.1 Moviéndote por Vi
-
- 2.1.1 Desplazamientos sobre líneas.
- 2.1.2 Desplazamientos por palabras.
- 2.1.3 Desplazamientos por frases.
- 2.1.4 Desplazamientos por párrafos.
- 2.1.5 Desplazamientos por pantalla.
- 2.1.6 Desplazamientos por marcas.
- 2.2 Manipulación de texto
-
- 2.2.1 Inserción de texto.
- 2.2.2 Eliminación de texto.
- 2.2.3 Sustitución de texto.
- 2.2.4 Cortar, copiar y pegar.
- 2.2.5 Búsqueda de texto.
- 2.3 General
-
- 2.3.1 Gestión de ficheros.
- 2.3.2 Activación/Desactivación de opciones.
- 2.3.3 Abreviaturas.
- 2.3.4 Macros.
- 2.4 Conclusión
1. Introducción
En entorno Unix/Linux, Vi/Vim es el editor de texto por antonomasia. Todos hemos oído hablar de él y algunos de vosotros lo habréis utilizado en la universidad o en el día a día en vuestro puesto de trabajo. Hay mucha gente que lo adora pero también existe otra que lo aborrece, en mi modesta opinión porque desconoce su potencial. Este tutorial no pretende ser un manual de referencia sino una guía de consulta que permita limar asperezas entre Viy aquellas persona que lo desconocen.
2. Vi/Vim
Vi/Vim, como hemos dicho anteriormente, es el editor de texto más popular en entorno Linux/Unix. Consta de dos modos: comando y edición. El modo comando permite al usuario ejecutar acciones sobre el texto, donde cada acción está ligada a una combinación de teclas (como veremos más adelante) y el modo edición similar a cualquier otro editor en el que podremos insertar y eliminar texto. El modo comando está activo desde el momento en el que se accede al Vi a través de la línea de comandos, por tanto, determinadas combinaciones de teclas ejecutarán ciertas acciones sobre el texto. El acceso al modo edición se realiza ejecutando sobre el modo comando las acciones de insertar o añadir texto y pulsando sobre la tecla Esc se regresará nuevamente al modo comando. El entorno de trabajo de Vi se divide en dos áreas (véase Figura 1.). El área coloreada en rojo, visualiza el contenido del fichero y se puede denominar zona o área de trabajo y la zona coloreada en azul, la barra de estado, donde se muestra la posición (fila, columna porcentaje%) en la que se encuentra el puntero, además del modo (si se encuentra en modo edición en la parte izquierda se visualiza el texto ‘– INSERTAR –‘ o ‘– INSERT –‘).
Figura 1. Pantallazo del editor Vi
El acceso al editor Vi se hará desde la línea de comando de un terminal tecleando la palabra “vi”. Existen múltiples maneras de invocación. Cada una de ellas, permiten realizar determinadas acciones sobre el fichero o ficheros a editar. A continuación, se muestra un resumen:
Comando | Descripción |
---|---|
vi | Invocación por defecto, se abre un editor vacío. Si se inserta texto que posteriormente se desea grabar en un fichero, el usuario debe indicar el nombre del fichero en el que se almacenará la información. |
vi fichero | Invocación que edita un fichero que ya existe y si no existe lo crea. |
vi fichero1 fichero2 … | Invocación que edita un número determinado de ficheros. Para movernos entre los diferentes ficheros dentro del editor utilizaremos el comando “n” más el nombre del fichero al que queremos movernos. |
vi +linea fichero | Invocación que edita el fichero posicionándose en una línea determinada. |
vi +/texto fichero | Invocación que edita el fichero posicionándose en la primera línea en la que se encuentre el texto deseado. |
Tres son los grupos en los que se ha dividido el conjunto de comandos que Vi dispone. El primero se ha denominado “moviéndote por Vi”, que engloba los comandos de desplazamiento por el área de trabajo. El segundo, “manipulación de texto”, agrupa comandos de inserción, eliminación y sustitución de caracteres y por último, “general”, que aglutina el resto de comandos. Indicar que existen un gran número de comando que para ser ejecutados en el modo comando del editor previamente se tendrá que haber pulsado la tecla:. A lo largo del tutorial se señalará este hecho de la siguiente manera :.
Nota
Si ejecutamos el comando vimtutor en una shell tendremos la posibilidad de practicar y aprender los comandos más habituales a través de un tutorial que dispone el editor.
2.1 Moviéndote por Vi
Existen multitud de comandos para desplazarnos sobre el texto, el más básico que todo usuario debe conocer es como realizar desplazamientos de izquierda a derecha o de arriba a abajo. Estos movimientos se podrán lograr con las teclas habituales: ←, ↑, → y ↓ o sus equivalentes h, k, l y j.
↑ | k | |||||
← | → | h | l | |||
↓ | j |
Sugerencia
Se recomienda que el usuario se habitúe a utilizar las teclas h, k, l y j ya que en ocasiones las teclas de desplazamiento no funcionan correctamente en algunos terminales.
Ya se ha visto como desplazarse por Vi de forma lenta pero segura, a continuación, se muestra una lista de comandos más avanzados que permiten desplazarse por Vi mucho más rápido. Para su correcta compresión se incluyen en la mayoría de comandos ejemplos visuales, en los cuales el carácter que se muestre de color azul representa la posición actual del cursor y el color rojo la posición final al ejecutar el comando.
2.1.1 Desplazamientos sobre líneas.
-
- 0 → Permite posicionarse al principio de la línea donde se encuentre el cursor.
-
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- $ → Permite posicionarse al final de la línea donde se encuentre el cursor.
-
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- n| → Permite posicionarse en el carácter n de la línea donde se encuentre el cursor.
- Pulsación: 6|
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- Enter ó + → Permite posicionarse en la siguiente línea.
-
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- – → Permite posicionarse en la anterior línea.
-
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- nG → Permite posicionarse en la línea n del fichero.
-
- G → Permite posicionarse en la última línea del fichero.
-
- :0Enter → Permite posicionarse en la primera línea del fichero.
-
- :nEnter → Permite posicionarse en la línea n del fichero.
-
- :$Enter → Permite posicionarse en la última línea del fichero.
-
- fc → Permite posicionarse en el siguiente carácter c que se encuentre en la actual línea.
- Pulsación:fm
Realización de un tutorial que muestras la bondades
de un editor como vi.
-
- Fc → Permite posicionarse en el anterior carácter c que se encuentre en la actual línea.
- Pulsación:Fa
Realiza ción de un tutorial que muestras la bondades
de un editor como vi.
-
- tc → Permite posicionarse justo antes del siguiente carácter c que se encuentre en la actual línea.
- Pulsación:tm
Realiza ción de un tutorial que muestras la bondades
de un editor como vi.
-
- Tc → Permite posicionarse justo después de anterior carácter c que se encuentre en la actual línea.
- Pulsación:Ta
Realiza ción de un tutorial que muestras la bondades
de un editor como vi.
2.1.2 Desplazamientos por palabras.
-
- w → (Word) Permite posicionarse en la siguiente palabra teniendo en cuenta los signos de puntuación.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- b → (Back) Permite posicionarse en la siguiente palabra teniendo en cuenta los signos de puntuación.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- W → (Word) Permite posicionarse en la siguiente palabra teniendo únicamente en cuenta los espacios entre las palabras.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- B → (Back) Permite posicionarse en la siguiente palabra teniendo únicamente en cuenta los espacios entre las palabras.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- e → (End) Permite posicionarse al final de la palabra teniendo en cuenta los signos de puntuación.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- E → (End) Permite posicionarse al final de la palabra teniendo únicamente en cuenta los espacios entre las palabras.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
2.1.3 Desplazamientos por frases.
-
- ( → Permite posicionarse en la siguiente frase.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
-
- ) → Permite posicionarse en la anterior frase.
-
A las doce y un minuto de ayer, Fernando Alonso dio
por concluido su sueño de plata. Aliviado, le comentó
2.1.4 Desplazamientos por parrafos.
-
- { → Permite posicionarse en el párrafo siguiente.
-
- } → Permite posicionarse en el párrafo anterior.
2.1.5 Desplazamientos por pantalla.
-
- H → (Home) Permite posicionarse al principio de la pantalla.
-
- M → (Middle) Permite posicionarse a mitad de la pantalla.
-
- L → (Last) Permite posicionarse al final de la pantalla.
-
- Ctrlu → (Up) Permite desplazar el cursor media pantalla hacia atrás.
-
- Ctrld → (Down) Permite desplazar el cursor media pantalla hacia delante.
-
- Ctrlf → (Forward) Permite posicionarse en la siguiente página.
-
- Ctrlb → (Back) Permite posicionarse en la anterior página.
-
- % → Permite posicionarse en el signo de apertura o cierre “(, ), {, }, ….” contrario.
-
[Este es un ejemplo para posicionarse en el cierre del corchete]
2.1.6 Desplazamientos por marcas.
Adicionalmente, Vi, proporciona la capacidad de establecer marcas que permiten saltar a una zona determinada del documento rápidamente, manteniéndose activas mientras el documento se encuentre abierto.
-
- m(a-z) → Permite establecer una marca en una determinada línea del documento. La marca estará en el rango a-z.
-
- ‘(a-z) → Permite posicionarse en una determinada marca.
2.2 Manipulación de texto.
Indicar que la ejecución de la mayoría de comandos de manipulación de textos que se muestran a continuación, el editor Vi, cambia del modo comando al modo edición. En este modo se podrá realizar las modificaciones oportunas sobre el fichero. Finalizado las acciones deseadas se retornará al modo comando pulsando Esc. Se ha dividido en varios apartados esta sección, agrupando los comandos por acciones comunes.
2.2.1 Inserción de texto.
-
- i → Permite insertar texto delante del cursor.
-
- I → Permite insertar texto al inicio de la línea donde se encuentra el cursor.
-
- a → Permite insertar texto detrás del cursor.
-
- A → Permite insertar texto al final de la línea donde se encuentra el cursor.
-
- o → Crea una nueva línea debajo de la línea actual.
-
- O → Crea una nueva línea encima de la línea actual.
2.2.2 Eliminación de texto.
-
- x → Elimina el carácter donde se encuentra el cursor.
-
- X → Elimina el carácter anterior al cursor.
-
- dd → Elimina la línea donde se encuentre el cursor. Si antes de ejecutar el comando introducimos un número, éste indica el número de líneas a eliminar.
-
- D → Elimina la línea desde el cursor hasta el final de la línea.
-
- dCmdMov → Permite eliminar hasta el comando de desplazamiento que se introduzca, es decir, si se introduce “$” eliminaría hasta el final de la línea. Si se introduce “w” elimina la palabra. Para más combinaciones ir al apartado de desplazamiento por el texto.
2.2.3 Sustitución de texto.
-
- rc → Permite sustituir el carácter actual por el tecleado (c).
- Pulsación: rt
Realización de un tuporial que muestras la bondades
Realización de un tutorial que muestras la bondades
-
- R → Remplaza el texto desde la posición actual.
- Pulsación: RejercicioEsc
Realización de un tuporial que muestras la bondades
Realización de un ejecicioque muestras la bondades
-
- s → Permite sustituir el carácter actual por el texto que se desee insertar.
-
- S → Permite sustituir la línea actual.
-
- C → Permite sustituir desde el cursor hasta el final de la línea.
-
- cCmdMov → Este comando es idéntico al comando “d” pero en vez de eliminar permite sustituir.
-
- J → Permite unir la línea actual con la inmediatamente siguiente.
-
- :s/txt/txt2 → Permite sustituir la primera aparición del texto txt por txt2 en la línea actual.
-
- :n,m s/txt/txt2/g → Permite sustituir todas las apariciones del texto txt por txt2 entre las líneas “n” a “m”.
-
- . → Permite repetir el último comando ejecutado.
-
- u → Permite deshacer el último comando ejecutado.
-
- U → Permite deshacer todos los comandos aplicados en la línea actual.
2.2.4 Cortar, copiar y pegar
Otros comandos primordiales en un editor de texto son las acciones de cortar, copiar y pegar. Vi utiliza los comandos de eliminación como comandos de corte, almacenando en el buffer del editor el texto eliminado de la última acción. Para el resto de acciones se utilizan combinaciones de teclas específicas.
-
- yy → Permite copiar la línea actual. De igual forma que el comando “dd”: si se teclea un número antes del comando se copiarán X lineas desde la posición actual.
-
- yp → (paste) Permite pegar el buffer de un comando anterior (cortar, copiar) antes del cursor actual.
-
- yP → (paste) Permite pegar el buffer de un comando anterior (cortar, copiar) después del cursor.
Vi permite almacenar el resultado de múltiples acciones de copia y corte. Para ello, antes de ejecutar cualquiera de estos comandos se debe pulsar » seguido de un almacén (a-z) y por último el comando. Para pegar un determinado texto de un almacén, de igual manera se teclea «, el almacén del texto a pegar y el comando de pegar (p).
2.2.5 Búsqueda de texto
-
- /ExpReg → Permite buscar del cursor hacia delante la expresión regular ExpReg.
-
- ?ExpReg → Permite buscar del cursor hacia atrás la expresión regular ExpReg.
-
- n → Permite visualizar la última búsqueda realizada.
-
- N → Permite realizar la última búsqueda en sentido contrario.
2.3 General
Para finalizar este tutorial se muestran los comandos de gestión de ficheros, opciones que pueden activarse/desactivarse en el editor, uso de abreviaturas y creación de macros.
2.3.1 Gestión de ficheros
-
- :rficheroEnter → Permite insertar el contenido del fichero debajo de la línea actual.
-
- :wEnter → Graba las modificaciones que se hayan efectuado en el fichero.
-
- :wficheroEnter → Graba el texto insertado en el fichero indicado siempre que éste no exista.
-
- :w!ficheroEnter → Graba el texto actual en el fichero indicado.
-
- :n,m wficheroEnter → Graba en fichero indicado las líneas entre n y m.
-
- :eficheroEnter → Descarta los cambios que se hayan hecho en el fichero actual y recupera los datos del fichero indicado.
-
- :qEnter → Permite salir del editor siempre y cuando no se haya producido ningún cambio en el fichero.
-
- :q!Enter → Permite salir del editor sin grabar los cambios.
-
- :wqEnter ó :xEnter ó :ZZEnter → Permite salir del editor pero previamente se almacenan los cambios.
-
- ^l → Permite refrescar la pantalla.
2.3.2 Activación/Desactivación de opciones.
Para activar opciones en Vi únicamente deberemos ejecutar “:”set opcion, donde opcion, corresponde a la opción que se quiere activar. De igual modo, para desactivar una opción, solamente deberemos ejecutar “:”set noopcion. A continuación se muestran algunas opciones que pueden resultar útiles en algún momento.
-
- : set allEnter → Muestra todas las opciones que dispone Vi con sus valores actuales.
-
- : set aiEnter → Permite que cada línea se escriba con la misma indentación que la línea anterior.
-
- : set listEnter → Muestra los caracteres de control.
-
- : set nu[mber]Enter → Muestra la numeración de las líneas en la parte izquierda de la pantalla.
-
- : set vbEnter → Sustituye el pitido por una indicación visual.
-
- : set wrapEnter → Muestra partidas las líneas que no caben en la pantalla.
-
- : set showmodeEnter → Muestra el modo en que se encuentra el editor, con un mensaje escrito en la parte inferior de la pantalla.
2.3.3 Abreviaturas
Son utilizadas para escribir cadenas de caracteres largas usando una combinación de teclas que previamente se haya asociado. Cada vez que en el modo edición se escriba la abreviatura configurada, se sustituirá por la cadena equivalente.
-
- :ab abreviatura equivalenciaEnter → Permite definir asignar una abreviatura a una cadena de caracteres.
- Ejemplo: : ab cp Comunidad de Propietarios
-
- :una equivalenciaEnter → Permite cancelar una abreviatura.
- Ejemplo: : una Comunidad de Propietarios
2.3.4 Macros
Con la definición de macros se podrá asociar a un carácter una secuencia de órdenes que reduce las operaciones que un usuario puede realizar en su día a día.
-
- :map tecla secuencia_ordenesEnter → Permite asignar al carácter “tecla” la secuencia de ordenes determinada.
- Ejemplo: :map F1 “a1Y
-
- :un map teclaEnter → Permite cancelar la macro “tecla”
- Ejemplo: :unmap F1
Truco
Si se quiere que tanto las abreviaturas, macros u opciones de vi se mantenga cada vez que accedemos al editor, se deberán añadir en un fichero llamado “.exrc” situado en el directorio home del usuario. La siguiente vez que se acceda al editor Vi serán ejecutadas automáticamente sin la necesidad de volverlas a insertar manualmente.
2.4 Conclusión
Como veis, manejar un editor de texto como vi no es muy complicado, solamente deberemos memorizar un número pequeño de comandos y nuestro día a día con el editor será menos difícil. Para ir memorizando poco a poco los comandos más importantes, os podéis imprimir este pdf como chuleta.