Me gusta usarlo ed
para pequeñas ediciones. Actualmente, solo presiono la barra espaciadora manualmente para sangrar bloques de código en formato ed
. ¿Es así como los autores de UNIX sangraron su código ed
? ¿O hay algún atajo que usaron y que no conozco?
Respuesta1
Creo que la forma más probable en que "los autores de UNIX" lo concibieron fue el viejo enfoque de "un trabajo, una herramienta": escriba su código usando ed
, úselo indent
después para sangrarlo correctamente.
Respuesta2
Al ser un editor de líneas, ed
no realiza un seguimiento de la sangría entre líneas.
Puede utilizar e !command
para llamar a un formateador de código externo en el archivo.
Una sesión de edición típica, en la que se crea, edita y sangra un programa C simple, podría verse así:
$ rm test.c
$ ed -p'> ' test.c
test.c: No such file or directory
> H
cannot open input file
> i
#include <stdlib.h>
int main(void)
{
/* There is no place else to go.
* The theatre is closed.
*/
return EXIT_SUCCESS;
}
.
> /void/
int main(void)
> s/void/int argc, char **argv/
> %p
#include <stdlib.h>
int main(int argc, char **argv)
{
/* There is no place else to go.
* The theatre is closed.
*/
return EXIT_SUCCESS;
}
> w
142
> e !clang-format test.c
158
> %p
#include <stdlib.h>
int main(int argc, char **argv)
{
/* There is no place else to go.
* The theatre is closed.
*/
return EXIT_SUCCESS;
}
> w
158
> q
$
Observe cómo escribir el archivo antes y después de llamar al formateador de código ( clang-format
en este caso). Estamos escribiendo el archivo test.c
y luego leemos el resultado de ejecutar el comando en este archivo.
Respuesta3
Hasta donde yo sé, ed
no tiene un comando específico para sangrar una línea. No aplica sangría automáticamente y no tiene un comando primitivo para agregar una cantidad fija de espacios en blanco al comienzo de una línea.
Sin embargo, puedes usar s/^/ /
, por ejemplo, para agregar dos espacios al comienzo de una línea sin cambiarla.
Aquí hay un ejemplo de sesión de edición con un programa C simple ingresado sin sangría ni espacio entre s #include
y main
. #
antes de que un comando introduzca un comentario.
$ ed '-p> ' hello_world.c
hello_world.c: No such file or directory
# print the buffer
> ,n
?
# insert text until "." from the beginning of the buffer.
> 0a
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("%d\n", 47);
return 0;
}
# print the buffer
> ,n
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main() {
4 printf("%d\n", 47);
5 return 0;
6 }
# indent lines 4 and 5
> 4,5s/^/ /
# print the buffer again, see if it makes sense.
> ,n
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main() {
4 printf("%d\n", 47);
5 return 0;
6 }
# add a blank line after line 2.
> 2a
.
# print the buffer again out of paranoia.
> ,n
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main() {
5 printf("%d\n", 47);
6 return 0;
7 }
# looks good, write and quit.
> wq
# size of file in bytes.
89