Как сделать отступы в блоках кода в `ed`?

Как сделать отступы в блоках кода в `ed`?

Мне нравится использовать edдля небольших правок. Сейчас я просто нажимаю пробел вручную, чтобы сделать отступ для блоков кода в ed. Так ли авторы UNIX делали отступ для своего кода в ed? Или есть какое-то сокращение, о котором я не знаю?

решение1

Я думаю, что наиболее вероятным вариантом, который подразумевали «авторы UNIX», был старый добрый подход «одна задача — один инструмент»: писать код с помощью ed, а затем использовать , indentчтобы сделать его отступы правильными.

решение2

Являясь строчным редактором, edне отслеживает отступы между строками.

Вы можете использовать его e !commandдля вызова внешнего форматировщика кода файла.

Типичный сеанс редактирования, в ходе которого создается, редактируется и выравнивается простая программа на языке C, может выглядеть следующим образом:

$ 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
$

Обратите внимание на запись файла до и после вызова форматировщика кода ( clang-formatв данном случае). Мы записываем файл, test.cа затем считываем результат выполнения команды в этом файле.

решение3

Насколько мне известно, edне имеет специальной команды для отступа строки. Он не делает отступ автоматически и не имеет примитивной команды для добавления некоторого фиксированного количества пробелов в начало строки.

Однако вы можете использовать s/^/ /, например, чтобы добавить два пробела в начало строки, не изменяя ее каким-либо другим образом.

Ниже приведен пример сеанса редактирования с простой программой на языке C, введенной без отступа или пробела между #includes и main. #перед командой, вводящей комментарий.

$ 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

Связанный контент