Vorteile der Verwendung von set -o vi

55

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?

Chander Shivdasani
quelle

Antworten:

58

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 ...

jasonwryan
quelle
1
Ich habe den Heiligen Gral
:)
3
Der Esc-v-Trick ist eine der besten Eigenschaften 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).
Michael Goldshteyn
2
Der Esc-v-Trick ist eigentlich kein spezifischer Vorteil set -o vi. Unter der Standardeinstellung von set -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.
John Gowers
8

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.

Kaz
quelle
Ich habe gehofft, dass es auf meiner Telefontastatur einen vi-Modus gibt. Sie erwähnen, dass dies so ist, als ob es es bereits gab. Wie bekomme ich den vi-Modus auf meinem Handy?
meh
6

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.txtnicht 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 .xtund geben dann das Extra ein t. 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, xtund dann können Sie ifü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: 9

Michael Durrant
quelle
1
Sie können auch ein paar Alt+Bs oder a Ctrl+Alt+] .im Emacs-Modus verwenden, daher scheint mir dies kein gutes Beispiel zu sein.
Mikel
2
Sehen wir Golf spielen: Emacs - Modus: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi - Modus: Up, F, ., a, t, Enter= 7. :)
Mikel
@Möglicherweise haben Sie vergessen, dass der vi-Modus im Einfügemodus gestartet Escwird.
Dragon788
5

Ich bin mir nicht sicher, ob es einen direkten Vorteil gibt. Ich bin seit vimehr als 20 Jahren ein Benutzer. Ich bin auch ein screenBenutzer für noch länger und von anderen Programmen, die viSchlü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.

Arcege
quelle
Ähnliche Situation für mich - Ich benutze vim häufig, aber ich habe immer festgestellt, dass es weniger Arbeit ist, die standardmäßigen emacs-ähnlichen Readline-Tasten (die genauso praktisch sein können wie die vi-Teilmenge) zu beherrschen, als eine Leitungsvermittlung hinzuzufügen in den vi-Modus auf jedem neuen System, das mir begegnet.
JW013,
1
Ich arbeite nicht auf Hunderten von Servern, aber ich verwende sshrc , um die Bash-Einrichtung zwischen verschiedenen Computern bei der Arbeit ähnlich zu halten ssh. Das hilft natürlich nicht, wenn ich eine Maschine vor Ort benutze, auf der sich meine .bashrcSachen nicht befinden .
Kyle Strand
4

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 sindreadline , z bash.

rahmu
quelle
1

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 die bashstandardmäß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 - Editor vi, und Esc, Ctrl+ Koder Ctrl+L

Shâu Shắc
quelle
1

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 vieinfach $drücken.

Hahn
quelle
1

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

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

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 :wqes ausgeführt.

Walter Werner
quelle
1
Dies ist zwar ein gutes Beispiel für die Verwendung des Bash-In- viModus, aber ein schlechtes Beispiel für Bash-Code. (1) Die Verwendung der Ausgabe von lsals 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.
G-Man sagt, dass Monica