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 |
g n |
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
*
o0
significa Repeticion indefinida (por lo que "repite la accion no poder cumplir mas"). Por ejemplo, el comandor*
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
_
.