¿Cómo se sangra el código de los bloques en "ed"?

¿Cómo se sangra el código de los bloques en "ed"?

Me gusta usarlo edpara 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 indentdespués para sangrarlo correctamente.

Respuesta2

Al ser un editor de líneas, edno realiza un seguimiento de la sangría entre líneas.

Puede utilizar e !commandpara 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-formaten este caso). Estamos escribiendo el archivo test.cy luego leemos el resultado de ejecutar el comando en este archivo.

Respuesta3

Hasta donde yo sé, edno 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 #includey 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

información relacionada