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?
15
Type :quit<Enter> to exit Vim
und mich zu Google veranlasst, wie ich zurückkomme. Wenni
Sie drücken, kehren Sie direkt in den Einfügemodus zurück.Antworten:
Ctrl-Cund Escist nicht das gleiche in
vi
/vim
in 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 invi
).quelle
Ich denke du meinst
vim
, nichtvi
.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, dassvi
Strg-C auf diesen Plattformen sein eigenes traditionelles Verhalten aufweist: Unterbrechen Sie den Prozess und lassen Sie Ihr Terminal in einem seltsamen Zustand .quelle
vi
Implementierung verweisen, die heute noch existiert und die nicht funktioniertCtrl-C
? Siehe meine Antwort für den wirklichen Unterschied.Wenn Sie sich beziehen
vim
, gibt es einen kleinen Unterschied.CTRL-C
prüft nicht auf Abkürzungen und löst nicht dieInsertLeave
Ereignis nicht aus. Sie oder Plugins haben alsoautocmd
Anweisungen definiert , die davon abhängenInsertLeave
, dass sie nicht ausgelöst werden.Aus der offiziellen Dokumentation http://vimhelp.appspot.com/insert.txt.html :
Sie können ein Mapping für
CTRL-C
bis definieren<esc>
, dann wird es ausgelöstInsertLeave
.quelle