Wie rückt man Codeblöcke in „ed“ ein?

Wie rückt man Codeblöcke in „ed“ ein?

Ich verwende es gerne edfür kleine Änderungen. Derzeit drücke ich einfach manuell die Leertaste, um Codeblöcke in einzurücken ed. Haben die Autoren von UNIX ihren Code in so eingerückt ed? Oder haben sie eine Abkürzung verwendet, die ich nicht kenne?

Antwort1

Ich denke, dass die „Autoren von UNIX“ höchstwahrscheinlich den guten alten Ansatz „eine Aufgabe, ein Werkzeug“ im Sinn hatten: Schreiben Sie Ihren Code mit und edverwenden Sie indentanschließend, um ihn richtig einzurücken.

Antwort2

Da es sich um einen Zeileneditor handelt, edwerden die Einrückungen zwischen den Zeilen nicht beachtet.

Sie können verwenden e !command, um einen externen Code-Formatierer für die Datei aufzurufen.

Eine typische Editiersitzung, in der ein einfaches C-Programm erstellt, bearbeitet und eingerückt wird, könnte folgendermaßen aussehen:

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

Beachten Sie das Schreiben der Datei vor und nach dem Aufruf des Codeformatierers ( clang-formatin diesem Fall). Wir schreiben die Datei hinein test.cund lesen dann das Ergebnis der Ausführung des Befehls für diese Datei ein.

Antwort3

Soweit ich weiß, edgibt es keinen speziellen Befehl zum Einrücken einer Zeile. Es rückt nicht automatisch ein und hat keinen einfachen Befehl zum Hinzufügen einer festen Menge an Leerzeichen am Anfang einer Zeile.

Sie können jedoch s/^/ /beispielsweise verwenden, um am Anfang einer Zeile zwei Leerzeichen hinzuzufügen, ohne sie sonst zu ändern.

Hier ist ein Beispiel für eine Bearbeitungssitzung mit einem einfachen C-Programm, das ohne Einrückung oder Leerzeichen zwischen dem #include„s“ und main„. “ eingegeben wurde #, bevor ein Befehl einen Kommentar einführt.

$ 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

verwandte Informationen