Ich habe viele Entwickler gesehen, die diesen Befehl verwendeten, um die Option auf vi zu setzen. Ich habe den wahren Gebrauch davon nie verstanden?
Welche Hilfe bietet der Wechsel zu vi bei der Verwendung von bash-Befehlen?
Indem Sie Ihre readline-Bearbeitung entweder auf emacs (die Standardeinstellung) oder vi ( set -o vi
) einstellen, standardisieren Sie im Wesentlichen Ihre Bearbeitungsbefehle in der gesamten Shell und in dem Editor Ihrer Wahl 1 .
Wenn Sie also einen Befehl in der Shell bearbeiten möchten, verwenden Sie dieselben Befehle 2 wie in Ihrem Texteditor. Dies bedeutet, dass Sie sich nur eine Befehlssyntax merken müssen und (wenn das nicht vorteilhaft genug wäre) wahrscheinlich Ihre Bearbeitung in beiden Umgebungen schneller und weniger fehleranfällig machen würden ...
Sie können diese Beziehung im vi-Modus weiter nutzen, indem Sie einen Befehl aus Ihrem Shell-Verlauf aufrufen Escape, in den Befehlsmodus wechseln und dann vden Befehl $ EDITOR öffnen, der für eine komplexere Bearbeitung mit der vollen Leistungsfähigkeit von vim geladen ist. Sobald Sie den Befehl zu Ihrer Zufriedenheit bearbeitet haben, wird :wqder Befehl wieder in Ihrer Shell ausgeführt.
1. Angenommen, Sie verwenden Emacs oder Vi / m als Editor.
2. Oder genauer gesagt, eine Teilmenge davon ...
set -o vi
, die die meisten Leute nicht kennen. Dies gilt insbesondere dann, wenn Sie denselben Befehl mehrmals mit unterschiedlichen Argumenten ausgeben möchten (als mehrere Befehlszeilenbefehle).set -o vi
. Unter der Standardeinstellung vonset -o EMACS
, Cx, Ce wird ein Emacs-Fenster (oder$EDITOR
, falls eingestellt) geöffnet , in dem Sie den Befehl bearbeiten können, bevor Sie ihn ausführen.Der Vi-Modus ist eine enorme Verbesserung der Benutzerfreundlichkeit, wenn Sie einen mobilen SSH-Client wie ConnectBot für Android verwenden.
Dies ist auf eine geringere Abhängigkeit von Modifikatortasten zurückzuführen.
Vim ist mit einer virtuellen Tastatur auf einem Smartphone oder Tablet viel einfacher zu bedienen als alles andere, einschließlich der in die Android-Benutzeroberfläche integrierten nativen Bearbeitungsmethoden. Ironischerweise ist es einfacher, C-Quellen mit Vim in einer SSH-Sitzung zu bearbeiten, als beispielsweise eine Sofortnachricht mit dem plattformeigenen Bearbeitungswidget für diesen Zweck zu bearbeiten.
Der Shell vi-Modus bietet einen ähnlichen Vorteil.
quelle
Hier können Sie mit den vi-Modi und -Operationen Dinge in der Befehlszeile bearbeiten.
Ein Beispiel wird dazu beitragen, es viel klarer zu machen:
Du tippst
cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/
aber du bekommst eine Fehlermeldung - du hättest
file1.txt
nicht tippen sollenfile1.xt
Ohne diesen Optionssatz drücken Sie den Aufwärtspfeil und dann den Linkspfeil und lassen ihn 35 Mal wiederholen, bis Sie zum
.xt
und geben dann das Extra eint
. Tastenanschläge insgesamt: 37 .Mit dieser Option können Sie (zum Beispiel) einmal den Pfeil nach oben drücken, dann Escape für den Befehlsmodus, 0, um zum Zeilenanfang
/xt[return]
zu gelangen, und dann zum,xt
und dann können Siei
für den Einfügemodus eingeben und das fehlende t eingeben. Dies mag in mancher Hinsicht wahnsinnig kompliziert erscheinen, aber wenn Sie ein VIM-Benutzer sind, sind diese Befehle bereits sehr gut bekannt. Tastenanschläge insgesamt: 9quelle
Alt+B
s oder aCtrl+Alt+]
.
im Emacs-Modus verwenden, daher scheint mir dies kein gutes Beispiel zu sein.Up
,Ctrl+Alt+]
,.
,Right
,t
,Enter
= 8. Vi - Modus:Up
,F
,.
,a
,t
,Enter
= 7. :)Esc
wird.Ich bin mir nicht sicher, ob es einen direkten Vorteil gibt. Ich bin seit
vi
mehr als 20 Jahren ein Benutzer. Ich bin auch einscreen
Benutzer für noch länger und von anderen Programmen, dievi
Schlüssel verwenden. Es ist für mich selbstverständlich, den "vi" -Modus lieber in bash zu setzen. Ich arbeite aber auch auf Hunderten von Servern in meinem Job, die meisten sind auf den Standardmodus "Emacs" eingestellt. Ich muss also beide Modi verwenden. Aber es ist wirklich nur eine Frage der Präferenz.quelle
ssh
. Das hilft natürlich nicht, wenn ich eine Maschine vor Ort benutze, auf der sich meine.bashrc
Sachen nicht befinden .Der Hauptvorteil ist die modale Bearbeitung Ihrer Kommandozeile. Wenn Sie mit Vim vertraut sind und dessen Philosophie mögen, müssen die Vorteile offensichtlich sein. Wenn Sie damit vertraut sind, können Sie dank des Muskelgedächtnisses Ihres Fingers Ihre Bash-Befehle blitzschnell bearbeiten.
NB : Wenn Sie keine modale Bearbeitung mögen, sollten Sie trotzdem lernen, den (Standard-) Emacs-Modus zu nutzen. Hier sind einige raffinierte Tastaturkürzel , die für jeden Prozess geeignet sind
readline
, zbash
.quelle
Wenn Sie sich daran gewöhnen
vi
, stellen Sie ihn als Shell-Editor auf den vi-Modus ein. Das wäre der offensichtliche Grund. Die andere ist , wenn diebash
standardmäßig in einigen OSes nicht verfügbar ist (meist UNIX wie AIX, Solaris), so dass die Shell - Geschichte ist nicht verfügbar, so dass die Art und Weise erhalten Sie die letzten Befehle , indem der Shell - Editorvi
, und Esc, Ctrl+ Koder Ctrl+Lquelle
Sie können auf einfache Weise mithilfe der Kurzbefehle von vim in der Befehlszeile navigieren und sie bearbeiten, z. B. schnell nach rechts zu einem Wort gehen und ein Wort löschen.
Standardmäßig müssen Sie, wenn Sie zum Ende der Zeile gehen möchten, Ctrl+ edrücken, während Sie mit wie in vim
set -o vi
einfach$
drücken.quelle
Wahrscheinlich zu spät zur Party, aber für mich ist die Verwendung des vi-Modus mehr für die Erstellung interaktiver Skripte. Zum Beispiel
Ein sehr einfaches Beispiel dafür, was ziemlich kompliziert sein könnte. Mit wird ESCkveine vi-Sitzung gestartet, in der Sie das Skript ändern können. Dann wird
:wq
es ausgeführt.quelle
vi
Modus, aber ein schlechtes Beispiel für Bash-Code. (1) Die Verwendung der Ausgabe vonls
als Eingabe für jede andere Art der Verarbeitung ist eine schlechte Idee. (2) Die$(…)
Syntax für die Befehlssubstitution wird allgemein als lesbarer angesehen als die`…`
Syntax. (3) Sie sollten immer Shell-Variablen angeben, es sei denn, Sie haben einen guten Grund, dies nicht zu tun , und Sie sind sicher , dass Sie wissen, was Sie tun.