Gosto de usar ed
para pequenas edições. Atualmente, apenas pressiono a barra de espaço manualmente para recuar blocos de código no formato ed
. Foi assim que os autores do UNIX recuaram seu código ed
? Ou há algum atalho que eles usaram que eu não conheço?
Responder1
Eu acho que a maneira mais provável que os "autores do UNIX" pretendiam ter sido a boa e velha abordagem "um trabalho, uma ferramenta": escreva seu código usando ed
, use indent
depois para que ele seja recuado corretamente.
Responder2
Por ser um editor de linhas, ed
não acompanha o recuo entre as linhas.
Você pode usar e !command
para chamar um formatador de código externo no arquivo.
Uma sessão de edição típica, onde um programa C simples é criado, editado e recuado, poderia ser assim:
$ 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 a gravação do arquivo antes e depois de chamar o formatador de código ( clang-format
neste caso). Estamos gravando o arquivo test.c
e depois lendo o resultado da execução do comando neste arquivo.
Responder3
Até onde eu sei, ed
não possui um comando específico para recuar uma linha. Ele não recua automaticamente e não possui um comando primitivo para adicionar uma quantidade fixa de espaços em branco ao início de uma linha.
No entanto, você pode usar s/^/ /
, por exemplo, para adicionar dois espaços ao início de uma linha sem alterá-la.
Aqui está um exemplo de sessão de edição com um programa C simples inserido sem recuo ou espaço entre s #include
e main
. #
antes que um comando introduza um comentário.
$ 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