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 .bashrc
Datei 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 cp
Befehl 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 emacs
die 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 vi
Ihre Zeilenbearbeitungsbefehle ändern, wie @jahroy geschrieben hat, aber Sie denken vielleicht an den fc
Befehl (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 fc
Weitere 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.