¿Cómo uso Ed, TECO, Vi o Emacs en Ubuntu?

¡Trabajadores!

El hombre es un animal que - ante todo - vive y se desarrolla en sociedad. Nuestra propia condición humana nos dicta un objetivo que es el bienestar y la felicidad, pero esta idea no es privada; sólo puede realizarse en Comunidad.

Nuestro Movimiento esto lo ha comprendido, y lo hemos hecho meridiano en un apotegma que reza "nadie puede realizarse en un país que no se realiza". Nuestra majestad no es otra que la de nuestro Pueblo, y el terreno de acción es la Nación Argentina.

Indudablemente que nuestro Movimiento, por estar formados por hombres y mujeres, no puede hacernos pretender alcanzar una perfección divina, sino de una que explica la teoría pero que define la práctica. Es por ello que el éxito no caerá de un níspero: habremos de construirlo con nuestras manos, mente y corazón enfocados en la tarea que nos hemos impuestos. Tampoco podremos pretender el suceso de un día para otro, toda vez que sólo la dedicación al estudio y un paulatino avance hacia el objetivo de bienestar nos aproximará a las buenas realizaciones que anhelamos.

Pues bien, en el campo de la informática esto representa una visión que no debe soslayarse. Hemos imaginado un sistema libre y abierto, donde cada uno sea capaz de aportar lo suyo en pos del bien común, y lo hemos reflejado en sanas licencias libres.

En este será muy tonificador y beneficioso conocer cuáles fueron los pasos realizados previamentes a la acción, a fin de poder dedicarnos a Conducir no sólo los sistemas telemáticos de hoy, sino ser capaces de operar los del ayer. Sólo esto nos permitirá proyectarnos en un futuro que lograremos venturoso si hacemos de la Justicia Social la bandera que guía nuestro camino.

No es secreto para nadie que con anterioridad a la existencia de terminales de video, los sistemas de cómputo eran dable de operarse con terminales teletipo. Estas terminales de comunicación se adaptaron por utilizarse anteriormente en el sistema Télex, el cual permitía transmitir texto codificado en el estándar ASCII o Baudot por medio de las líneas telefónicas.
Se hizo patente entonces adaptar estas terminales teletipo para operar remotamente en computadoras mainframe dotadas de una interfaz de acceso remoto asíncrono. Las terminales electromecánicas estaban dotadas de un teclado bastante similar al de una máquina de escribir, y a menudo disponían de una impresora de tipos. A veces una perforadora adosadapermitía registrar los ingresos (e incluso programas enteros) en una cinta de papel perforado. Una de las aplicaciones que pudo adaptar un sistema computado fue la posibilidad de recibir textos del teclado remoto y almacenarlo digitalmente en el banco de memoria de la computadora.


La ventaja de un editor de textos era poder corregir los errores y poder agregar o quitar texto del banco de memoria.
Ed

Entre los primeros editores de texto encontramos al Ed. Se trata de un editor de texto primigenio de tipo modal y orientado a líneas - y como tal - espartano. Carece de control de cursor direccionable pues se maneja como una máquina de escribir. Se usa para crear, mostrar, modificar y manipular archivos de texto en forma remota o local.

Para iniciarlo simplemente utilizamos el comando:

ed

Si se lo ejecuta con un argumento de archivo existente, copiará dicho archivo a la memoria del editor (en la jerga, "buffer"). Por ejemplo podremos utilizar:

ed archivo.txt


Al iniciar, ed no presenta nada en nuestra terminal. Para comenzar a agregar una línea, podremos ingresar el comando "agregar", con:

a

(Naturalmente, seguido de la tecla Enter, a fin de enviar el comando "agregar" la computadora remota, si es que utilizamos una).

De ahora en mas, habremos pasado al modo "ingreso", sin que ed nos informe nada. Todas las líneas que tipeemos en la terminal se irán agregando al buffer de memoria del mainframe que tenemos asignado, siempre y cuando llas introduzcamos en memoria con la tecla Enter.

Como en todos los anitguos editores orientados a líneas, las posibilidades de edición una vez que introducimos la línea en la memoria buffer son limitadas y engorrosas, por lo cual conviene escribir con sumo cuidado y revisar la línea antes de presionar Enter para su introducción. Dependiendo de nuestra terminal o sistema, podremos utilizar la tecla Retroceder, o bien Ctrl+Retroceder para borrar caracteres que se encuentren en la terminal, pero no una vez que se hayan enviado al sistema remoto.

Una vez que hemos terminado de ingresar el texto que necesitamos en la memoria, podremos detener el modo de "agregado" de lineas y pasar al modo de comandos nuevamente. Para ello debemos introducir una línea con un "." ("punto"). Al pasar al modo comando, Ed no nos informará nada, pero cualquier cosa que introduzcamos a continuación serán interpretados como comandos de control.

Por ejemplo, si introducimos otra vez un punto, Ed nos devolverá la última línea del texto almacenada en el buffer de memoria.

Debemos saber que los cambios se realizan en la memoria del equipo, y no se almacenan en el fichero hasta que necesariamente le demos la orden w ("write" o escribir en el disco). Para ello ingresamos, por ejemplo:

w archivo.txt

...y Ed nos devolverá un número que es indicativo de la cantidad de caracteres contenidos en el texto almacenado en disco.

Para salr del editor Ed debemos introducir el comando:

q

...y se nos devolverá al prompt de sistema. Resumiendo todo, podríamos obtener una hoja imnpresa de teletipo con una sesión de Ed en UNIX podía verse así:


Naturalmente Ed es antediluviano y engorroso de operar en líneas ya escritas. En tal caso podremos movernos en las líneas de texto usando el modo de comandos (".") e ingresando un número de línea. O bien podremos utilizar -n o +n para indicarle al cursor subir n líneas o bajar n líneas con respecto a la linea en la que estamos actualmente. Cuando lo hagamos Ed nos devolverá el contenido de dicha línea , y podremos cambiarla con el comando c ("cambiar"). Volvemos a tipear el contenido de la línea corregida y la ingresamos con Enter. Finalmente podremos guardar cambios con el comando w.

Debemos tener en cuenta que el comando a nos deja agregar una línea después de la línea actual. Pero en el caso de querer agregar una línea antes de la línea actual, debemos utilizar el comando i ("insertar").

Si deseamos borrar una línea nos movemos hacia ella de la forma que os he explicado, y utilizamos el comando d. Si quisiéramos borrar una línea que no es la actual, indicamos en número de línea seguido de d.

De esta forma, Ed nos permite trabajar mínimamente en un sistema que presenta líneas de texto.

No pasó mucho tiempo para que los editores de líneas permitieran realizar programas complejos. Esto a su vez provocó el advenimiento de los primeros sistemas operativos de tiempo compartido y multiusuarios, entre ellos el UNIX de Bell Labs, el TOPS-10 de la DEC, el ITS del MIT, etcétera.


No bien los sistemas computados tuvieron la posibilidad de presentar imágenes de video y una memoria suficiente para graficar caracteres, se hizo evidente que seria más cómodo realizar editores que pudiesen directamente presentar el texto en una pantalla de tubo de rayos catódicos.

Estas videoterminales comenzaron a reemplazar a los teletipos e impresoras mecánicas.


TECO

Uno de los primeros videoeditores para equipos DEC PDP podríamos decir que fue Visual TECO. Se trataba de un derivado el antiguo editor TECO de Dan Murphy de 1962, pero que diez años después permitía presentar en video en la terminal, a su vez contaba con un set de operaciones de macros, que consistían en órdenes preconcebidas que podían enviarse a la máquina remota.

Al estar desarrollado para numerosos sistemas, fue influyente en toda una tercera generación de editores derivados. La operación de TECO requiere respetar 3 reglas, y conocer 16 comandos de operación.
REGLAS de TECO:

    Para darle ingreso los comandos se debe oprimir dos veces la tecla Escape (ilustrada con $ a continuación, no es el signo monetario). En algunos de los comandos se emplea Un solo $ para finalizar los argumentos de cadena ("string").
    Los comandos no necesitan ser ejecutados de a uno por vez. Puede ingresarse una larga serie de comandos y luego introducir "$ $", y TECO los ejecutará en orden.
    TECO está orientado a caracteres, de modo que recuerda la posición del caracter en su locación actual en el fichero, llamada "puntero". La mayoría de los comandos muestran o cambian los contenidos del fichero en el puntero, o mueven el puntero a otro lugar dentro del fichero.

Una sesión de TECO en un sistema TOPS-20 se ve de la siguiente manera:
Comandos de TECO

1.      ERfichero$Y1    Abre el fichero para ingresar datos    
2.      EWfichero$1     Abre un fichero para salida    
3.      EX      Guarda y sale  
4.      Ctrl+c, Ctrl+c   Sale (sin guardar)    
5.      C2      Mueve el caracter hacia adelante
6.      R2      Mueve el caracter hacia atrás
7.      L3      Se mueve al comienzo de la línea siguiente
8.      Itexto$ Inserta la cadena texto
9.      J       Salta al comienzo del fichero
10.     ZJ      Salta al Final del fichero
11.     T3      Tipea desde el puntero hasta el final de la línea.
12.     V       Tipea la línea actual
13.     D2      Borra el caracter en el puntero
14.     K3      Borra la línea actual
15.     Stexto$ Busca la cadena "texto"
16.     FStexto_reemplazado$texto_original$ Sustituye la cadena texto_original por texto_reemplazado

*) Algunas versiones de TECO aceptan directamente un nombre de archivo como argumento de línea de comandos, haciendo que 1 y 2 sean innecesarios. Algunas versiones de TECO tiene un comando EBfichero$Y que hace lo mismo que 1 y 2 en un solo paso.

**) Prefijo numérico: mueve/borra múltiples caracteres (un número negativo invertirá la dirección).

***) Prefijo numérico: mueve/tipeea/borra múltiples líneas (un número negativo inverte la dirección); (sólo T, K). Pfrefijo H: tipea/borra todo el archivo.

TECO y sus variaciones si distinguían sobre todo por su escasísimo uso de memoria, y su empleo normalmente asíncrono con la máquina remota.
Vi
El editor Vi creado por Bill Joy es un derivado lejano de Ed, pero es más potente y pensado ya para su uso en terminales de video con memoria interna (buffer incorporado). Se continúa utilizando actualmente y se lo considera un programa liviano (si bien antiguamente no era el caso, y consumía muchos recursos en un mainframe). Acutalmente, es muypopular su versión modernizada, Vim.
Podremos ingresando:
vi
La pantalla de Vi/Vim se divide en el buffer de edición y las dos líneas inferiores que consiste en la zona de status e ingreso de comandos.
Normalmente opera en modo revisión, por lo cual no podremos modificar ni agregar ningún texto. Para pasar al modo de inserción de texto hemos de presionar la tecla i o bien Insertar. Sólo entonces podremos escribir o pegar en la Terminal el texto que querramos.
Una vez que terminamos el insertado de texto en el buffer de memoria, podremos terminar el mismo presionando la tecla Fin.

Para pasar al modo de ingreso de comandos debemos presionar Esc, y al hacerlo el cursor pasará a la sección inferior de la pantalla, donde podremos escribir los comandos. Los mismos comienzan con :
Por ejemplo, para guardar los cambios en el archivo recién editado en Vi, hemos de presionar Esc, y tipear el comando :w, que se encargará de almacenar en disco o "escribir" ("write"). Para salir de Vi se utiliza :q ("quit") del editor. Nos devolverá a la línea de comandos del router. Si quisiéramos salir rápidamente sin que nos pni nos informe nada, ingresamos :q!. Y si queremos guardar y salir, usamos :wq
EMACS


Emacs es un editor de texto disponible para múltiples plataformas, incluyendo GNU. Como Vi o Nano, Emacs es un editor de texto con presentación en pantalla. Pero a diferencia de Vi, Emacs no es un editor con modo de inserción, lo que significa que cualquier carácter que ingresemos en Emacs se insertará automáticamente en el archivo, a no ser que incluya un prefijo de Comando.

Los comandos en Emacs son caracteres de control (realizados mientras presionamos la tecla Ctrl mientras tipeamos otro caracters) o en prefijos por un conjunto de caracters reservados Esc o Ctrl+x. Podremos tipear tecla Esc directamente (porque realmente es un carácter) y luego seguida por otro carácter. La tecla Ctrl debe mantenerse presionada mientras tipeamos el otro caracter.

Otra distinción entre Emacs y Vi consiste en que emacs es capaz de editar varios archivos a la vez. La ventana de Emacs puede dividirse en varias ventanas, cada una de las cuales contendrá una vista en el buffer de memoria. Cada buffer de memoria corresponde normalmente a un archivo diferente. Es por ello que muchos de los comandos listados a continuación se empleaan para leer ficheros y cargarlos en nuevos buffers, así como mover distinto contenido entre buffers diferentes .

Para cargar un archivo en Emacs podríamos utilizar:

emacs archivo

Si el archivo ya existe, se nos presentará entonces la primera página del texto en pantalla.

La manera más sencilla de aprender emacs es comenzarlo e ir avanzando en el completo tutorial en línea que incluye para esto presionamos Esc para ir al modo de comandos, e ingresamos help-with-tutorial.
Comandos de Ayuda
* 	Ctr+h 	help-command: Muestra el primer caracter en montones de archivos de ayuda
* 	Ctrl+h t 	help-with-tutorial: Comando que ejecuta el tutorial de Emacs
  	Ctrl+h i 	information: describes most of the emacs commands in man style pages
  	Ctr+h k 	describe-key: tells you what a particular key stroke does
* 	Ctrl+h a 	command-apropos: prompts for a string and
  then searches for all emacs commands that contains that string
  	Esc ? 	also does command-apropos
* 	Ctrl+h ? 	help-for-help: Describe como usar las ayudas.
Manejo de archivos y comandos de guardado
* 	Ctrl+x Ctrl+f 	Buscar Archivo: primero solicita un nombre de archivo, y luego carga el fichero en un buffer de edición del mismo nombre
* 	Ctrk+x Ctrl+s 	Guardar: almacena el buffer en el disco con un nombre asociado
  	Ctrl+x Ctrl+w 	Guardar como: Solicita un nuevo nombre de archivo y escribe el buffer en él
Comandos de Movimiento del Cursor o de la pantalla
Emacs operaba en antiguos sistemas UNIX, cuyas terminales iniciales (como la venerable DEC VT100) carecían de teclas de control asociadas a los teclados hoy en boga. Normalmente hoy utilizamos las funciones actuales de las flechas de cursor y las de control del cursor y control de paginado, pero en Emacs podremos contar también con las equivalencias de los antiguos movimientos.
* 	Ctrl+a 	Mueve el cursor al Inicio de la línea
  	Ctrl+e 	Mueve el cursor al Fin de la línea
* 	Ctrl+f 	Mueve el cursor hacia adelante un caracter
* 	Ctrl+b 	Mueve el cursor hacia atrás un caracter.
* 	Ctrl+n 	Mueve el cursor a línea a continuación
* 	Ctrl+p 	Mueve el cursor a la línea previa
  	Ctrl+v 	Avanza pantalla
  	Esc+v 	Retrocede pantalla
* 	Esc+<; 	Va al inicio del buffer
* 	Esc+>; 	Va al final del Buffer
  	Esc+f 	Avanza el cursor una palabra
  	Esc+b 	Retrocede el cursor una palabra
Comandos para Copiar y BorrarCopy and Delete Commands
  	Ctrl+d 	delete-char: Borra el caracter debajo del cursor ("Supr")
  	Esc+d d 	delete-word: Borra desde el cursor hasta el final de la palabra inmediatamente por delante del cursor
* 	Cttl+k 	kill-line: Elimina la línea actual
* 	Ctrl+@ 	set-mark-command: Marca el comienzo de un área de texto a ser operada
* 	Ctrl+w 	kill-region: Borra el área de texto entre la marca y la posición actual del cursor.
* 	Ctrl+y 	yank: inserta en la posición actual del cursor actual o en la localización más recientemente borrada
  	Esc+w 	copy-region-as-kill: Copia un área entre la marca y el cursor al buffer de borrado, de modo que pueda ser colocado en otro lado.
Comandos de Búsqueda
* 	Ctrl+s 	isearch-forward: Pide una cadena de texto y luego la busca desde la posición del cursor hacia adelante
  	Ctrl+r 	isearch-backwardSimilar al anterior, isearch-forward, pero busca la cadena en sentido inverso:
  	Esc+% 	query-replace: Pregunta una cadena de búsqueda y una cadena para reemplazarla
Comandos de Ventana y Buffer
  	Ctrl+x 0 	zero-window: Borra la ventana actual 
  	Ctrl+x 2 	double-window: divide la ventana actual en dos partees, permitiendo editar en dos localizaciones diferentes de un mismo archivo, o permitiendo ver dos ficheros distintos a la vez
  	C-x b 	switch-to-buffer: Presenta un buffer distinto en pantalla
  	C-x o 	other-window: Mueve el cursor a la otra ventana (asumiendo que existan dos ventanas o buffers abiertos a la vez
* 	C-x C-b 	list-buffers: lista los buffers cargados en memoria
Salir de Emax, corregir errores y otros
* 	Ctrl+x, Ctrl+c 	save-buffers-kill-emacs: Cuando termina la edición, guarda los buffers editados pero no guardados y vuelve al Shell.
* 	Ctrl+g 	keyboard-quit: Si mientras tipeaba un comando cometemos un error, esto aborta el comando en progreso.
  	Ctrl+u 	universal-argument: Si desea repetir un comando varias veces ingrese este comando,
      ...seguido de un nro. (para la cantidad de veces)     ...seguido de un comando que desea repetir
* 	Ctrl+x u 	undo: deshace el último comando ingresado, en caso de haber cometido un error.
* 	Esc+x 	execute-extended-command: pregunta el nombre de un comando de emacs;;
  Le permite ejecutar un comando, si conocer cómo se llama. pero no puede recordar su atajo.