小さな編集にed
を使用するのが好きです。現在、スペースバーを手動で押して、ed
のコードブロックをインデントしています。これは、UNIXの作成者がコードをed
でインデントした方法ですか?それとも、私が知らない彼らが使用したショートカットはありますか?
「UNIXの作者」が意図した最も可能性の高い方法は、古き良き「1つの仕事、1つのツール」アプローチであったと思います。ed
を使用してコードを記述し、その後indent
を使用します。適切にインデントするため。
ラインエディタであるため、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
に書き込んでから、このファイルに対してコマンドを実行した結果を読み込んでいます。
私の知る限り、ed
には行をインデントするための特定のコマンドはありません。自動的にインデントされることはなく、行の先頭に一定量の空白を追加するための基本的なコマンドもありません。
ただし、たとえばs/^/ /
を使用すると、他の方法で変更せずに、行の先頭に2つのスペースを追加できます。
これは、インデントまたは#include
sとmain
の間にスペースを入れずに入力された単純なCプログラムを使用した編集セッションの例です。コマンドがコメントを導入する前の#
。
$ 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