Editor Contextual Compatible de Edimburgo

El Editor Contextual Compatible de Edimburgo (ecce) es un editor de texto basado en lineas escrito a finales de la decada de 1960 para las terminales teletipo de la minicomputadora PDP-10. El original fue escrito en lenguaje BCPL por Hamish Dewar, pero ha sido reescrito al lenguaje C en 1984.

Ecce fue uno de los primeros editores conocidos como "modales" (con modo de insercion y de comandos). Inspiro a vi y durante mas de 25 anos incito culto entre los entornos multiusuario.

Si bien su almacen es limitado (768 kilobytes), es suficiente para unas 350 paginas de texto aproximadamente.

Uso de Ecce

Ejecucion de Ecce

Si bien la sintaxis basica para editar un fichero es:

ecce fichero

Si bien normalmente querrias utilizar un fichero de texto muleto para evitar cometer errores, notaras que Ecce es tan antediluviano que es incapaz de crear uno de forma autonoma (en caso de que este no exista ya). Por lo tanto deberas recurrir a elaborar un fichero en blanco con touch, indicando un fichero origen.txt. Por ejemplo:

touch fichero.txt ;
./ecce origen.txt destino.txt
ecce fichero_origen fichero_destino

Prompts de Modo

Al iniciar, Ecce presentara en la terminal el tamano de memoria disponible para su almacen ("buffer"), y aguardara ordenes:

Espacio de buffer = 768 KBytes
Ecce
>

Durante su operacion, Ecce puede presentar alguno de sus dos prompts modales:

  • Prompt del Modo de Comandos: >
  • Prompt del Modo de introducccion de texto: :

Mecanografiado basico

Para mecanografiar texto de forma basica con Ecce, basta conocer solo cuatro comandos de una letra.

Comando Accion
g Mecanografiar una linea de texto individual
: Detiene el modo de insercion
m mueve el puntero a la linea siguiente
p Presentar la linea actual

En el prompt de comandos > ordena el comando g ("mecanografiar una linea") y presiona la tecla Intro.

Comprueba que ha aparecido un prompt de introduccion de texto en forma de un : (esto indica que aguarda que escribas el texto para la linea). Mecanografia la linea de texto deseado, y al finalizarla presiona la tecla Intro para almacenarla en el buffer.

En el caso de UNIX, una linea equivale a un parrafo entero; este puede tener mas de los 80 o 132 caracteres tradicionales de una linea impresa en papel.

Si es necesario, puedes repetir la operacion para agregar otra linea individual.

Mecanografiado indefinido

Si en el prompt de comandos > en lugar de g introduces el comando g* ("mecanografiar lineas indefinidamente"), al presionar la tecla Intro Ecce permite mecanografiar lineas indefinidamente. Cada vez que presiones la tecla Intro agregara una linea adicional. Una vez que hayas almacenado todas las lineas deseadas, puedes detener el modo de introduccion de texto mediante :; esto te devolveras al prompt de comandos >.

Al llegar al final del documento, recibirias el mensaje *** FIN *** y volveras al prompt de comandos >.

Guardar y salir

Para guardar los cambios del buffer almacen en el fichero destino y cerrar el editor, desde el prompt de comandos >, introduce el comando especial %c.

Correccion

La edicion de texto avanzada supera al de una maquina de escribir tradicional, pues a la vez de permitir mover el punter, permite realizar tareas de correccion sobre el texto.

Movimiento

Imagina a Ecce como una antigua maquina de escribir. En aquellas girabas el rodillo para avanzar o retroceder en las lineas en el papel.

En Ecce puedes alterar la posicion actual de edicion en el documento (denominada "puntero") utilizando los comandos de movimiento. El comando m ("mover"), por si solo avanza a la linea siguiente, pero si antepones el signo - podras retroceder a la linea anterior. Si lo combinas con un numero entero, podras avanzar o retroceder una determinada cantidad de lineas.

Si utilizas el modificador *, podras avanzar de forma indefinida hasta llegar al final del documento (o hasta el principio, en caso de utilizar el comando m-*).

Recuerda que al llegar al final del documento daras con el indicador *** FIN ***.

Comandos de Movimiento
Comando Movimiento del Puntero
r Mueve el puntero un caracter a la derecha (en la linea actual)
l Mueve el puntero un caracter a la izquierda (en la linea actual)
t/texto Transporta el puntero inmediatamente despues de la cadena texto (en la linea actual)
m Mueve el puntero a la linea siguiente
m- Mueve el puntero a la linea anterior
Comandos de correccion
Comando Correccion
e Borra un caracter a la izquierda del puntero
e- Borra un caracter a la derecha del puntero
k Elimina la linea del puntero
k- Elimina la linea anterior al puntero
i/texto Inserta la cadena texto a la derecha del puntero
i-/texto Inserta la cadena texto a la izquierda del puntero
gn Genera n lineas y permite mecanografiarlas.
d/texto En la linea actual, borra la (primer iteracion de la) cadena texto
d-/texto En la linea anterior, borra la (primer iteracion de la) cadena texto
u/texto Borra todo hasta la cadena texto (en la linea actual)
Buscar y reemplazar

Para esta operacion se utilizan dos comandos:

f/cadena1/ A partir del puntero, busca cadena1 (hasta el fin del fichero).
s/cadena2 Tras encontrar la cadena buscada con f/cadena1/, la reemplaza con cadena2
Modificadores
  • El modificador * o 0 significa Repeticion indefinida (por lo que "repite la accion no poder cumplir mas"). Por ejemplo, el comando r* mueve el puntero hasta llegar al final de la linea actual.
  • Como regla general, al especificar un numero entero n luego de un comando, lo ejecutaras dicho comando recursivamente n veces. Por ejemplo:
p23 Imprime 23 lineas (siguientes al puntero)
m10 Baja el puntero diez lineas
g5 Genera 5 lineas de texto en blanco debajo del puntero

De la misma manera es posible invertir el orden del comando antecediendo al numero n con un signo -. Por ejemplo:

m-* Retrocede el puntero todas las lineas (vuelve al inicio del texto)
p* Imprime todo desde el puntero hasta el final del texto
m-10 Sube el puntero diez lineas
p-23 Imprime (en orden inverso) las 23 lineas anteriores al puntero
p-* Imprime todo hasta el inicio del texto
  • Si solo introduces un numero en la linea de comandos, Ecce repetira el comando introducido anteriormente una n cantidad de veces.

Comandos Especiales

Los comandos especiales de Ecce se utilizan para funciones

Comando especial Resultado
%c Guarda los cambios y sale del editor
%a Abandona la edicion y sale del editor
%v Imprime la version de Ecce

Edicion

Junto a los comandos de correccion, Ecce dispone la posibilidad de usar comandos de edicion para las lineas, que al actuar como parrafos permiten una edicion mas conveniente.

Comandos de Edicion Avanzada

Comando avanzado Resultado
b Divide la linea en la posicion del puntero.
j Une la linea desde el puntero a la siguiente linea
a Ajusta el largo
C Cambia mayusculas con Shift derecho
C- Cambia a minusculas con shift izq

Comandos Compuestos

Los comandos compuestos son secuencias de comandos cerrados entre parentesis.

La utilidad de estos comandos esta en su repeticion en bucle, condicional o incondicional. Observa estos ejemplos:

Operacion Ejemplo Significado/efecto
0 o * Repeticion indefinida ("repite hasta no poder cumplir mas")
r0 Mueve el puntero al final de la linea
(mr)0 Busca la primer linea en blanco
e-0 Borra hacia atras hasta el comienzo de la linea
? Ejecucion opcional (se ignora la condicion de falla)
((r61p)?m)0 Imprime las lineas con no mas de 60 caracteres
, Ejecucion alterna ("si el primer intento falla, ejecuta el siguiente, etc")
(r81lb,m)0 Divide las lineas con mas de 80 caracteres
(f/River/(v/Bocado/,e5i/Boca/))* "Reemplaza River con Boca excepto para Bocado"
\ Falla invertida
(mv'+'\)0 Busca la siguiente linea que comienza con `+

Combinacion de comandos

Como en el caso anterior, estos pueden repetirse indicandole numeros apropiados:

f/texto/4 Busca la 4ta. iteracion de "texto"
r40 Mueve a la derecha 40 caracteres

Estas ordenes pueden encadenarse juntas:

m23 f/texto/ p3

Podras delimitar patrones por cualquier caracter excepto letras, digitos, y aquellos que tienen significacion definida. Podras usar: ", /, $, >, +, ., :, = y _.