2008-09-26 8 views
10

Okay, ich bin sicher, das ist einfach, aber es macht mich verrückt. Ich habe vor kurzem an einem Programm gearbeitet, bei dem ich ein bisschen in die Zeit zurückgegangen bin und Redhat 9 benutzt habe. Wenn ich in der Befehlszeile von einem Standard-xterm mit KornShell (ksh) tippe, erreiche ich das Ende des Richten Sie die Bildschirmfolien nach rechts aus (indem Sie die linke Seite meines Befehls abschneiden), anstatt den Text in eine neue Linie zu legen. Das macht es für mich schwierig, weil ich nicht einfach vom vorherigen Befehl kopieren und einfügen kann, direkt von der Kommandozeile aus. Ich muss mir den Verlauf ansehen und den Befehl von dort einfügen. Falls Sie sich wundern, mache ich viele awk-Skripte, die dazu führen, dass die Zeile ziemlich lang wird.KornShell (ksh) wraparound

Gibt es eine Möglichkeit, die Befehlszeile zum Umbrechen zu zwingen, anstatt die Sichtbarkeit auf die rechte Seite des Befehls, den ich tippe, zu verschieben?

Ich habe durch man Seite Optionen ohne Glück gegossen.

Ich bin mit:

  • XFree86 4.2.99.903 (174)
  • KSH 5.2.14.

Danke.

+0

Bitte teilen Sie uns mit, wenn Sie die gewünschte Antwort erhalten haben. – tzot

Antwort

2

Wenn möglich, versuchen Sie den Befehl, um mehrere Zeilen zu brechen, indem das Hinzufügen \ dh:

 
$ mycommand -a foo \ 
    -f bar \ 
    -c dif 
0

Ich weiß nicht, von einer Art, die Schale, zu wickeln zwingen, aber ich würde fragen, warum Sie würde so lange Zeilen schreiben. Bei awk-Skripten wickle ich das Skript einfach in einfache Anführungszeichen und breche dann die Zeilen, wo ich möchte. Es wird nur schwierig, wenn Sie einfache Anführungszeichen im Skript benötigen - und teuflisch, wenn Sie sowohl einfache als auch doppelte Anführungszeichen benötigen. Tatsächlich ist die Regel einfach genug: Verwenden Sie einfache Anführungszeichen, um das gesamte Skript zu umbrechen, und wenn Sie ein einfaches Anführungszeichen im Skript haben möchten, schreiben Sie '\''. Das erste Zitat beendet die vorherige Zeichenfolge in Anführungszeichen. das Backslash-Anführungszeichen ergibt ein einzelnes Anführungszeichen; und das letzte einfache Anführungszeichen beginnt eine neue Zeichenfolge in Anführungszeichen. Es wird wirklich haarig, wenn Sie diesen Charakteren für eine Eval oder etwas ähnliches entgehen müssen.

Die andere Frage ist - warum nicht in einen Editor starten. Da ich ein hartnäckiger Vim-Nutcase bin (ok - ich benutze vi seit über 20 Jahren, also ist es einfacher für mich als die Alternativen), habe ich die Korn-Shell auf den vi-Modus eingestellt (-o vi), und kann es tun, um den Editor zu starten, egal was ich eingegeben habe.

6

Haben Sie man ksh getan?

Sie möchten eine set -o multiline tun.

Auszug aus man ksh:

mehrzeilige:

Die integrierten Editoren werden mehrere Zeilen auf dem Bildschirm für Linien verwenden, die länger als die Breite des Bildschirms sind. Dies funktioniert möglicherweise nicht für alle Terminals .

+0

Funktioniert für Kitt - und es hat mich geistig angetrieben! – Anonymouslemming

0

Dies ist eine Art einer pragmatischen Antwort, aber wenn das ist ein Problem für mich, den ich in der Regel so etwas wie:

strings ~/.history | grep COMMAND 

oder

strings ~/.history | tail 

(Die History-Datei hat eine ein bisschen binäre Daten drin, daher 'Strings')

4

eval $ (resize) sollte ich tun t.

+0

Es scheint, dass dies jedes Mal ausgeführt werden muss, wenn Sie die Größe des Terminalfensters ändern (Putty). Gibt es einen dynamischen Weg, dies zu tun? – Kit

0

Die einfache Antwort ist:

$ set -o multiline 

KSH früher als 5,12, wie die KSH mit NetBSD ausgeliefert 6.1, ist diese Option nicht hat. Sie müssen aktuelle Interactive Input Line Editier-Modus deaktivieren, die in der Regel Emacs:

$ set +o emacs 

Dies schaltet sich aus viel featuers insgesamt, wie Tab-Vervollständigung oder die Verwendung von ‚Up-Pfeil‘ -Taste rollen Zurück zum vorherigen Befehl.

Wenn Sie sich irgendwie an den Emacs-Modus gewöhnen, denken Sie daran, dass^a zum Anfang der Zeile geht ("Home" -Taste funktioniert nicht) und^e geht zum Ende.