Editores de programación clásicos: Emacs y Vi
Table of Contents
Existen editores de programación e IDEs que usamos para escribir el código fuente. Dentro de los editores de programación hay dos que son muy populares porque su desarrollo comenzó en los años 70 del siglo pasado y, todavía hoy, siguen siendo mantenidos y utilizados.
En este apartado vamos a pasar a estudiarlos por encima ya que, en general, su conocimiento y dominio es importante porque, al menos en el caso de Vi, es el editor instalado por defecto en servidores de Linux.
Vamos a empezar por Emacs y terminaremos con Vi.
Hay otros editores clásicos como Nano, pero nos vamos a centrar en Emacs y Vi.
Tango GNU Emacs como Vi son editores que se caracterizan por ser altamente extensibles y con una curva de aprendizaje (muy) alta.
GNU Emacs
GNU Emacs, o simplemente Emacs, es muchos más que un editor de textos o de programación pero, nosotros aquí, nos vamos a centrar en su uso como editor de programación.
Figure 1: GNU Emacs
Partes básicas en Emacs
Para poder usar Emacs es necesario conocer las denominaciones que se le da a las diferentes partes que componen el entorno de Emacs:
Figure 2: Partes básicas
Ves que:
- A la ventana se le denomina Frame
- Puedes tener abiertas varias ventanas o Window en un mismo Frame
- Al contenido que se tiene abierto en cada Window se le denomina Buffer
- Cada Window tiene su propio Modeline con información sobre el Buffer abierto en dicho Window
El minibuffer
Algunas acciones en Emacs requieren interacción por parte del. En estos casos, Emacs habilita un Minibuffer en la parte de abajo.
Por ejemplo, en la siguiente captura se ejecutado la acción de abrir un fichero y se necesita que el usuario introduzca la ruta de dicho fichero:
Figure 3: Minibuffer
Formato de los atajos
Aunque se puede usar el menú como en cualquier otro editor para las acciones habituales: abrir, guardar, copiar, etc, en este tipo de editores la ventaja radica en usar los atajos (o macros) para llevar a cabo todas las acciones. De ahí que la curva de aprendizaje de estos editores sea tan alto.
Antes tengo que explicarte el significado de las acciones que te voy a dar a lo largo de este apartado. Para empezar tienes que conocer tres teclas que se usan para los diferentes atajos:
- La tecla
Ctrles la tecla Control que tienes debajo a la izquierda de un teclado ISO - La tecla
Shiftes la tecla que tienes arriba de la tecla Control y debajo de la tecla Bloq Mayus en un teclado ISO - La tecla
Superes la tecla que, normalmente, tiene el logotipo de Windows
Conocido esto, te explico el formato que vamos a seguir para especificar los atajos en Emacs:
Ctrl+Gsignifica que tienes que mantener pulsada la teclaCtrly sin soltar pulsas la teclaGCtrl+X Ctrl+Ssignifica que tienes que mantener pulsada la teclaCtrly sin soltar pulsasX, sueltas, ySCtrl+X Ksignifica que tienes que mantener pulsada la teclaCtrl, sin soltar pulsasX, sueltas la teclaCtrly pulsasK
Atajos y acciones básicas
Las acciones básicas: abrir, guardar, cambiar entre ficheros (Buffer) abiertos y cerrar.
Ctrl+X Fpara abrir ficheros (se abre el Minibuffer para que indiques la ruta del fichero a abrir)Ctrl+X Spara guardar los cambios del fichero que estás editandoCtrl+X Kpara cerrar el fichero (Buffer) abierto, también denominado kill buffer (el Frame no se cierra)Ctrl+X Bpara cambiar entre ficheros (Buffer) abiertosCtrl+X Ctrl+Cpara cerrar el Frame y con ello todos los ficheros (Buffer) abiertos
Atajos para trabajar con varios Window
Aquí te muestro los atajos necesarios para trabajar con varias ventanas o Window en un mismo Frame.
Ctrl+X 3para dividir el Window en vertical
Figure 4: División vertical
Ctrl+X 2para dividir el Window en horizontal
Figure 5: División horizontal
Ctrl+X O(letra O) para cambiar y moverse entre los diferentes WindowCtrl+X 0(número 0) para cerrar el Window que tiene el focoCtrl+X 1para cerrar todos los Window menos el que tiene el foco (es una forma de maximizar el Window actual)
Cuando cierras un Window no se cierra el Buffer ni el fichero abierto en dicho Buffer. Para cerrar el Buffer tienes que usar el atajo, visto arriba, Ctrl+X K.
TODO Seleccionar, copiar, cortar y pegar
Vi
Vi es un editor ampliamente utilizado en el mundo UNIX y GNU/Linux. De hecho, como, es posible, que te hayas encontrado, en Git el editor por defecto es Vi.
En este apartado vamos a ver cómo usar este editor de forma básica. Es un editor muy potente pero con curva de aprendizaje alta.
Hoy en día, los programadores que optan por Vi como su editor de código usan versiones o "sabores" más "modernos" como son Vim o Neovim (nvim), especialmente este último.
Figure 6: Neovim (captura obtenida en la web oficial de Neovim)
Si haces una búsqueda en la Web verás que hay una versión muy popular que es la que ya he señalado anteriormente llamada Neovim.
Los modos de Vi
El editor Vi tiene dos modos de operación:
- Modo de comandos: donde podemos desplazarnos dentro de un fichero y realizar operaciones de edición como buscar, eliminar y modificar texto, entre otras cosas. Cada vez que abras Vi te encontrarás en este modo.
- Modo insertar: donde podemos escribir texto.
Cambios entre modos
Para pasar del modo comandos al modo insertar tienes que usar uno de los comandos que permite insertar texto (ver más abajo).
Para pasar del modo insertar al modo comandos hay que pulsar la tecla escape (ESC a partir de ahora).
Comandos más comunes
Para desplazarse por el fichero (en modo comando)
- Abajo:
j - Arriba:
k - Izquierda:
h - Derecha:
l - Moverse palabra a palabra hacia adelante:
w - Moverse palabra a palabra hacia atrás:
b - Moverse frase a frase hacia adelante:
( - Moverse frase a frase hacia atrás:
) - Moverse párrafo a párrafo hacia adelante:
{ - Moverse párrafo a párrafo hacia atrás:
} - Página arriba:
Ctrl+UoPgUp - Página abajo:
Ctrl+DoPgDn - Ir a una línea:
25gg(iría a la línea 25) - Ir a final de la línea:
$ - Ir al principio de la línea:
0 - Para ir al inicio del fichero:
gg - Para ir al final del fichero:
G
Editar y modificar
- Para insertar texto antes del cursor:
i - Para insertar texto después del cursor:
a - Para insertar texto al principio de la línea:
I - Para insertar texto al final de la línea:
A - Para insertar debajo de la línea:
o - Para insertar arriba de la línea:
O
Copiar y pegar
- Para copiar la línea actual:
yy - Para copiar una palabra:
yw - Para pegar después del cursor:
p - Para pegar antes del cursor:
P
Borrar
- Para borrar un carácter:
xoX - Para borrar una palabra:
dw(en realidad borra desde el cursor hasta el final de la palabra) - Para borrar la línea actual:
dd
Deshacer
- Para deshacer el último cambio:
u
Abrir, guardar y salir
- Para abrir un archivo:
:e <ruta al fichero> - Para salir si no hay cambios por guardar:
:q - Para guardar los cambios y salir:
:xo:wq - Para salir sin guardar (forzar la salida):
:q! - Para guardar con otro nombre de archivo (guardar como):
:w <ruta al nuevo fichero>
Números de línea
- Mostrar números de línea:
:set number - Ocultar números de línea:
:set nonumber
Buscar
- Para buscar texto:
/<texto>donde<texto>es el texto que quieres buscar
Una vez escribes el texto que quieres buscar tienes que presionar Intro y, a partir de ahí, pulsa n para buscar siguiente ocurrencia y N para buscar ocurrencia anterior. De esta manera navegas entre los resultados de la búsqueda.
Reemplazar
Te lo explico con un ejemplo. Imagina que quieres reemplazar "class main{" por "class Main {". Tienes que escribir el siguiente patrón:
:%s/class main{/class Main {/g
Repetir comandos
Puedes añadir un número delante de un comando para repetir dicho comando un número de veces. Algunos ejemplos:
y3ycopia 3 líneas desde la posición del cursord5welimina 5 palabras desde la posición del cursor5jse mueve 5 posiciones hacia adelante10wse mueve 10 palabras hacia adelante
Más sobre Vi
Si quieres conocer todas las opciones/comandos de Vi puedes visitar el manual desde la terminal:
$ man vi
O puedes buscar en la Web. Verás la cantidad de tutoriales, vídeos y recursos que hay alrededor de Vi.