Verwenden von VI-Tasten zum Bearbeiten von Shell-Befehlen in UNIX

Verwenden von VI-Tasten zum Bearbeiten von Shell-Befehlen in UNIX

Ich hatte mal einen Kollegen, der wirklich gut in UNIX war.

Er zeigte mir, wie ich mit Vi-Tastenkombinationen meine Shell-Befehle bearbeite.

Er platzierte den Befehl in einer Datei, die bei jeder Anmeldung ausgeführt wurde.

Seitdem bin ich zu einem anderen Projekt übergegangen.

Leider weiß ich nicht mehr, wie ich das einrichte.

Gibt es hier jemanden, der weiß, wie man mit Vi-Tastenkombinationen Befehle im Terminal bearbeitet?

Wie kann ich diese Einstellung dauerhaft machen?

Antwort1

Sie sprechen vom großartigsten Feature aller Zeiten!

Sie können VI-Befehle verwenden, um Shell-Befehle (und den Befehlsverlauf) zu bearbeiten, indem Sie Folgendes zu Ihrer .bashrcDatei hinzufügen:

set -o vi

Sie können diesen Befehl auch von der Befehlszeile aus ausführen, um nur Ihre aktuelle Sitzung zu beeinflussen.

Wenn Sie Bash nicht verwenden, ersetzen Sie Ihre Shell durch die entsprechende RC-Datei.


Dadurch können Sie VI-Befehle verwenden, um beliebige Befehle zu bearbeiten ...

Sie können auch jund verwenden, kum durch Ihren Verlauf zu navigieren (nachdem Sie gedrückt haben ESC).

/Sie können auch (nach dem Drücken von ) verwenden ESC, um nach alten Befehlen zu suchen.

Mit anderen Worten, um den superlangen cpBefehl zu finden, den Sie vor zehn Minuten eingegeben haben:

ESC/cpENTER

nAnschließend können Sie mit und durch alle passenden Befehle in Ihrem Verlauf blättern N.

All dies macht mich an der Befehlszeile 10 Billionen Mal produktiver!

Antwort2

Wenn Sie Bash verwenden, können Sie, wie Jahroy und Evil Otto bereits geantwortet haben,

set -o vi

um Bash zu veranlassen, Bearbeitungsbefehle im vi-Stil zu verwenden.

Sobald Sie dies getan haben, können Sie Esc vden vi-Editor mit einer temporären Datei starten, die eine Kopie der aktuellen Befehlszeile enthält. Sie können den Befehl bearbeiten und ihn sogar durch mehrere Zeilen ersetzen. Wenn Sie die Datei speichern ( :wq), führt die Shell die bearbeiteten Befehle aus.

Wenn Sie es vorziehen

set -o emacs

Sie können Ctl-XCtl-Edasselbe tun. Dabei wird Ihr bevorzugter Editor verwendet $EDITOR, nicht unbedingt Emacs.

(Ich persönlich verwende vi (eigentlich vim) für die meisten meiner Bearbeitungen, aber ich bevorzuge set -o emacsdie Shell; das Ein- und Ausschalten des Einfügemodus ist zum Bearbeiten von Dateien großartig, aber für interaktive Befehle umständlich. Ihre Ergebnisse können abweichen.)

Antwort3

Sie können set -o viIhre Zeilenbearbeitungsbefehle ändern, wie @jahroy geschrieben hat, aber Sie denken vielleicht an den fcBefehl (verfügbar in Bash und ich glaube, KSH, aber wahrscheinlich nicht Tcsh), der den vorherigen Befehl in einen Editor einfügt (FCEDIT oder EDITOR, den Sie wahrscheinlich auf vi eingestellt haben) und den Befehl dann ausführt, wenn Sie den Editor verlassen. help fcWeitere Informationen finden Sie auf der Manpage oder oder probieren Sie es einfach aus.

Antwort4

Tatsächlich ist dies das beste Feature aller Zeiten. Aber es gibt noch mehr:

Erstellen Sie eine Datei mit dem Namen

.editrc

enthält die Zeile

bind -v

Editlineist eine BSD-lizenzierte Versionsbibliothek, die Dienste ähnlich wie Readline bereitstellt. Diese .editrc-Datei setzt Ihre Tastenkombinationen in der MySQL-Befehlszeilen-Shell oder in jeder Anwendung, die Readline nicht verwendet, auf den vi-Modus.

Ich bin im Laufe der Jahre etwas vergesslich geworden, daher meine .zshrcQuellen einige Wrapperfür den vi-Modus, um mir in der Befehlszeile anzuzeigen, in welchem ​​Modus ich mich befinde. Das ist nett.

Ich weiß, dass Sie in zsh eingeben können

bindkey -L

und holen Sie sich die Liste der Tastenkombinationen. Ich bin sicher, dass Bash etwas Ähnliches haben muss. Nicht alle vi-Tasten sind standardmäßig gebunden. Binden Sie sie, wie Sie es für richtig halten, und schon kann es losgehen.

verwandte Informationen