我喜欢用于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/^/ /
向行首添加两个空格,而无需进行其他更改。
#include
下面是一个示例编辑会话,其中输入了一个简单的 C 程序,在s 和之间没有缩进或空格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