Bricht die Verwendung von Strg + C anstelle von Esc, um den Einfügemodus zu beenden, irgendetwas in vi?

15

Wenn Sie vi verwenden, können Sie den Einfügemodus mit Ctrl+ Canstelle des traditionelleren Modus beenden Esc. Gibt es Situationen, in denen es unerwünscht wäre, erstere anstelle der letzteren zu verwenden? Bricht es etwas anderes als Best Practice?

MDMarra
quelle
Es ist unerwünscht, den ersteren versehentlich zu treffen, was Sie zu einem Fehler macht Type :quit<Enter> to exit Vimund mich zu Google veranlasst, wie ich zurückkomme. Wenn iSie drücken, kehren Sie direkt in den Einfügemodus zurück.
Noumenon

Antworten:

9

Ctrl-Cund Escist nicht das gleiche in vi/ vimin den meisten Modi, einschließlich Einfügen - Modus. Der Unterschied besteht darin, dass EscAbkürzungen ausgelöst werden, während Ctrl-cdies nicht der Fall ist. Ob dies für Sie von Bedeutung ist, hängt davon ab, ob Sie oder von Ihnen verwendete Plugins Abkürzungen verwenden.


Beachten Sie, dass es sicherer ist, anzunehmen Escund Ctrl-Csie nicht das gleiche bedeuten in vim. Ein weiteres Beispiel von derselben Site ist das Verlassen des Block-Einfügemodus (nicht in vi).

jw013
quelle
Gut zu wissen, aber meine Frage betraf das Beenden des Einfügemodus.
MDMarra
@ DMarra Doh, hast deine Frage falsch verstanden. Einfügemodus ist immer noch anders: siehe aktualisierte Antwort.
jw013
1
Hier ist der wichtigste Unterschied, mit dem ich mich befasst habe: Mehrzeiliges Einfügen im visuellen Blockmodus funktioniert mit Esc und nicht mit Cc.
Faszination
4

Ich denke du meinst vim, nicht vi.

Dies funktioniert in der Tat vim, obwohl ich es nur verwenden würde, wenn ich zu 100% sicher wäre, dass ich niemals ein Nicht-Linux-Betriebssystem berühren würde. Der Grund dafür ist, dass andere Betriebssysteme möglicherweise eigene Implementierungen von habenvi , die dies nicht implementieren, und Sie möglicherweise feststellen, dass viStrg-C auf diesen Plattformen sein eigenes traditionelles Verhalten aufweist: Unterbrechen Sie den Prozess und lassen Sie Ihr Terminal in einem seltsamen Zustand .

Michael Hampton
quelle
3
Können Sie auf eine viImplementierung verweisen, die heute noch existiert und die nicht funktioniert Ctrl-C? Siehe meine Antwort für den wirklichen Unterschied.
jw013
2

Wenn Sie sich beziehen vim, gibt es einen kleinen Unterschied. CTRL-Cprüft nicht auf Abkürzungen und löst nicht dieInsertLeave Ereignis nicht aus. Sie oder Plugins haben also autocmdAnweisungen definiert , die davon abhängen InsertLeave, dass sie nicht ausgelöst werden.

Aus der offiziellen Dokumentation http://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

Sie können ein Mapping für CTRL-Cbis definieren <esc>, dann wird es ausgelöst InsertLeave.

weises Glück
quelle