Früher hatte ich einen Kollegen, der wirklich gut mit UNIX umgehen konnte.
Er zeigte mir, wie ich Vi-Tastenkombinationen verwenden kann, um meine Shell-Befehle zu bearbeiten.
Er legte den Befehl in eine Datei, die jedes Mal ausgeführt wurde, wenn ich mich anmeldete.
Seitdem bin ich zu einem anderen Projekt gewechselt.
Leider weiß ich nicht mehr, wie ich das einstellen soll.
Gibt es hier jemanden, der weiß, wie man Vi-Tastenkombinationen verwendet, um Befehle im Terminal zu bearbeiten?
Wie kann ich diese Einstellung dauerhaft machen?
vi bindings in the shell
das größte Feature ist, das jemals erfunden wurde!jj
mit ihnen zu binden,ESC
wie wir es normalerweise in vim tun?Wenn Sie Bash verwenden, wie jahroy und evil otto bereits geantwortet haben, können Sie verwenden
um bash zu veranlassen, vi-artige Bearbeitungsbefehle zu verwenden.
Sobald Sie dies getan haben, können Sie eingeben Esc v, um den vi-Editor mit einer temporären Datei zu starten, die eine Kopie der aktuellen Befehlszeile enthält. Sie können den Befehl bearbeiten und sogar durch mehrere Zeilen ersetzen. Wenn Sie die Datei speichern (
:wq
), führt die Shell die bearbeiteten Befehle aus.Wenn Sie es vorziehen
Sie können Ctl-XCtl-Edas Gleiche tun. Es wird Ihren bevorzugten Editor verwenden
$EDITOR
, nicht unbedingt Emacs.(Persönlich benutze ich vi (eigentlich vim) für die meisten meiner Bearbeitungen, aber ich bevorzuge es
set -o emacs
in der Shell. Das Ein- und Ausschalten des Einfügemodus ist großartig für die Bearbeitung von Dateien, aber umständlich für interaktive Befehle. YMMV.)quelle
set -o emacs
nicht was du willst?Sie können verwenden
set -o vi
, um Ihre Zeilenbearbeitungsbefehle wie @jahroy posted zu ändern, aber Sie denken möglicherweise an denfc
Befehl (verfügbar in bash und ich denke ksh, aber wahrscheinlich nicht tcsh), der den vorherigen Befehl in einen Editor (FCEDIT oder EDITOR) überträgt , den Sie wahrscheinlich auf vi gesetzt haben) und führt den Befehl dann aus, wenn Sie den Editor verlassen. Weiterehelp fc
Informationen finden Sie in der Manpage oder oder probieren Sie es einfach aus.quelle
alias r='fc -e -'
ist ein wertvoller Alias, um frühere Befehle erneut auszuführen.fc
Allein in Kornschale entstanden, glaube ich. Sie können Befehle nach Nummer angeben (fc 123 129
um die Befehlsnummern 123 bis 129 im Verlauf zu bearbeiten). Sie können relative Zahlen angeben (fc -10 -1
um die letzten 10 eingegebenen Befehle zu bearbeiten). Sie können vorherige Befehle mit auflistenfc -l
. Sie können einen Befehl durch ein Präfix mit demr
Alias angeben (r make
führt den letzten Aufruf von ausmake
; dies gilt auch,r m
wenn Siemv
seit der letzten Ausführung keinen Befehl ausgeführtmake
haben usw.).Verwenden Sie die integrierte
fc
Shell, um den zuletzt verwendeten Befehl in vim zu bearbeiten und eine bearbeitete Version nach dem Speichern und Beenden des Editors aufzurufen . Ohne Argumente wird Folgendes ausgeführt:/tmp
und füllt sie mit dem zuletzt eingegebenen Befehl:cquit
).Der Befehl funktioniert sowohl in bash als auch in zsh.
quelle
Dies ist in der Tat das größte Merkmal, das es je gab. Es gibt aber noch mehr:
Erstellen Sie eine Datei mit dem Namen
die Zeile enthält
Editline ist eine BSD-lizenzierte Versionsbibliothek, die readline-ähnliche Dienste bietet. Mit .editrc werden Ihre Tastaturbelegungen in der MySQL-Befehlszeilen-Shell oder in jeder Anwendung, die readline nicht verwendet, auf den vi-Modus gesetzt.
Ich bin im Laufe der Jahre etwas vergesslich geworden, so dass mein .zshrc einige Wrapper für den vi-Modus beschafft , um mir zu zeigen, in welchem Modus ich mich in der Befehlszeile befinde . Es ist schön.
Ich weiß, dass Sie in zsh schreiben können
und rufen Sie die Liste der Tastenkombinationen ab. Ich bin sicher, dass Bash etwas Ähnliches haben muss. Nicht alle vi-Schlüssel sind standardmäßig gebunden. Binden Sie sie, wie Sie es für richtig halten, und Sie sind auf dem Weg zu den Rennen.
quelle
Geben Sie in Ihr Terminal Folgendes ein
export EDITOR=vi
.Speichern Sie diese Einstellung. Setzen Sie diese Zeile in die Datei ~ / .profile
quelle
$EDITOR
) festvi
. Sie können keine Shell-Befehle mitvi
(zumindest nicht direkt) bearbeiten .$EDITOR
enthältvi
. Ich denke, es ist die einzige Shell, die das macht.