Der Hauptgrund, warum ich Vim gegenüber Emacs mag, ist, dass meine Handbewegung von der Startreihe sehr gering ist (selbst als Programmierer). Das einzige Mal, dass ich dies tue, ist das Verlassen des Einfügemodus durch Drücken von Escape.
Ich habe kürzlich erfahren, dass ich mit Strg + C auch den Einfügemodus verlassen kann. Dies ist jedoch keine wirkliche Verbesserung.
Wie kann ich den Einfügemodus beenden, ohne dass meine Hände die Startreihe verlassen und ohne dass sich das, was ich tippen kann, massiv auswirkt? Hinweis: Ich verwende hauptsächlich Vanille-Vim mit einem Dvorak-Tastaturlayout, würde aber auch gerne Lösungen für ein QWERTY-Layout hören.
key-bindings
insert-mode
keyboard-layout
escape
durron597
quelle
quelle
Antworten:
Eine häufige Bindung, die Sie sehen werden, ist jj , da sie für QWERTZ-Layouts gut geeignet ist, wenn Sie die Startzeilenpositionierung verwenden.
Wenn
jj
Sie in diesem Fall ein Literal eingeben möchten , sollten Sie zwischen der Eingabe des zweiten Zeichens (standardmäßig) 1 Sekunde warten. (siehe:help 'timeout'
für Details)Es gibt auch
c-o
welche, die Sie aus der Einfügung herausnehmen, einen normalen Befehl ausführen lassen und Sie dann direkt wieder in die Einfügung zurückbringen.http://vim.wikia.com/wiki/Avoid_the_escape_key
quelle
j
ist derc
Schlüssel. Das wäre also nicht schlecht (zum Tippencc
). Ich könnte auch bindenhh
(qwertyj
key = dvorakh
), was mich nur booten würde, wenn ich tippeshhhhhhh
oder so.jk
? Finden Sie zwei Schlüssel, die in Dvorak nebeneinander liegen, aber in Ihrer bevorzugten Sprache keine gebräuchlichen Kombinationen darstellen.tn
ist zum Beispiel das Positionsäquivalent vonjk
.jk
/ zukj
verlassen, sogar in Dvorak. Sie sind die Tasten "c" und "v" auf einer QWERTZ-Tastatur, daher sind sie für meinen linken Zeiger und meinen Mittelfinger einfach.ii
stattdessen verwenden. Ja, Sie müssen Ihre Finger von der Startreihe wegbewegen, aber es ist immer noch bequem. Und noch entscheidender ist, dass Sie zwischen den Modi wechseln können, ohne Ihren Finger zu bewegen.Neben den eingebauten Alternativen
<C-[>
und<C-c>
den<Esc>
von anderen genannten Schlüsseln besteht eine weitere beliebte Lösung darin, die Zuordnung<CapsLock>
als zusätzliches Escape vorzunehmen . Dies gilt sowohl für eine QWERTY- als auch für eine DVORAK-Tastatur.Auf diese Weise können Sie mit dem linken kleinen Finger ganz einfach die Esc-Taste drücken, ohne die Hände aus der HomeRow zu entfernen (in CapsLock befand sich übrigens zu dem Zeitpunkt, als vi erfunden wurde, Escape auf den Tastaturen).
Remapping kann erfolgen:
unter Linux variiert je nach Desktop-Umgebung. Zum Beispiel unter Linux ist Mint / Cinnamon nur eine Frage der Auswahl der richtigen Option unter Menü-> Tastatur-> Tastaturlayout-> Feststelltaste. Alternativ, aber weniger einfach, kann es mit dem Programm xmodmap auf Xorg-Ebene neu zugeordnet werden und die folgende
.Xmodmap
Datei ausführen :Das System kann so eingerichtet werden, dass es bei jeder Anmeldung automatisch ausgeführt wird, indem die folgenden Shell-Skriptzeilen (vorausgesetzt, Sie
.Xmodmap
befinden sich in Ihrem Ausgangsverzeichnis~
) strategisch in der Kette der automatisch eingegebenen Anmeldedateien platziert werden:Dies ist jedoch schwierig, da die tatsächlich bezogenen Dateien je nach verwendeter (Desktop-) Umgebung variieren. Als Beispiel habe ich xmodmap als Eintrag in den Cinnamon "Startup Applications" (Startup Applications) aufgerufen (wodurch ich mehr als die Standardanpassung für die Neuzuordnung von GUI-Schlüsseln durchführen kann).
Einige Leute gehen sogar noch weiter und programmieren die Feststelltaste so, dass sie sich verhält:
Ctrl
Taste durch Drücken und Halten,Esc
Taste durch Drücken und schnelles Loslassen.Dies kann unter Windows und Mac erfolgen, indem das entsprechende Remap-Dienstprogramm richtig eingestellt / programmiert wird (speziell für AutoHotkey-Hinweise finden Sie hier und für KeyRemap4MacBook-Check hier ). Unter Linux mit dem Programm xcape .
quelle
Ctrl
Taste (in der normalen Position), ohne den kleinen Finger zu drehen: Sie können sie mit der äußeren Handfläche drücken, wie es hier gut beschrieben ist (ich fand diesen netten cleveren Trick im Netz, Zeit, es zu geben zurück :) und ein dickes Lob an wer es erfunden hat)Ctrl
zuAlt
(Cmd
) und umgekehrt neu zuordnen , dann<C-[>
scheint wirklich. Pinky ist schwach, Daumen ist stark. Auf QWERTY muss man dafür nicht einmal die Startreihe verlassen, auf Dvorak ist es nicht so gut, aber akzeptabel.Die Zuordnungen, die ich verwende, sind:
Auf diese Weise können Sie einfach jund kgleichzeitig drücken, ohne sich Gedanken darüber machen zu müssen, welchen Sie zuerst drücken.
quelle
<C-[>
und<C-c>
sind zwei native Alternativen zu<Esc>
.Siehe
:help i_<esc>
und:help i_ctrl-c
was den Unterschied zwischen<C-c>
und erklärt<Esc>
.quelle
<C-[>
hat eine schöne Symmetrie (beide kleinen Finger bewegen sich in entgegengesetzte Richtungen).<C-c>
nicht genau dasselbe ist wie<Esc>
.<C-c>
kann Plugins und Autocmds auf subtile Weise beschädigen.Sie können Karte Caps Lockzu Control ohne externes Programm :
setxkbmap -option caps:ctrl_modifier
Dadurch Controlwird die Startzeile aufgerufen, und es ist einfacher, alle von Control geänderten Striche zu drücken , einschließlich Ctrl-[und Ctrl-Cdie beide den Einfügemodus in Vim beenden.
Alternativ schlägt Giovanni am Ende seiner Antwort vor, eine Karte Caps Lockzu erstellen, die beide Funktionen ausführt Control und Escape von der Länge der Druckmaschine abhängt. Hierzu muss jedoch zusätzliche Software installiert werden.
quelle
Ich würde vorschlagen, mein Plugin vim-easyescape zu verwenden .
Das Problem bei einer einfachen Zuordnungssequenz
inoremap jj <ESC>
ist, dass Vim bei jeder Eingabe joder kim Einfügemodus angehalten wird (es wartet auf den nächsten Schlüssel, um zu bestimmen, ob die Zuordnung angewendet werden soll). Die Pause führt zu einer visuellen Ablenkung, die Sie möglicherweise bemerken oder nicht bemerken. vim-easyescape hat kein solches Problem und unterstützt benutzerdefiniertes Timeout.quelle
In den Terminals vi und Vim kann alt+
single-normal-mode-key
in den meisten Terminals schnell bearbeitet werden.Dies funktioniert, weil die meisten Terminals den Alt-Modifikator als Escape-Zeichen senden. Wenn Sie beispielsweise alt+kden Terminalemulator eingeben, werden zwei Zeichen an das laufende Programm gesendet:
esc
,k
. Vi und Vim interpretieren dies so, wie Sie es erwarten würden. Er verlässt den Einfügemodus (aufgrund des Escape-Befehls) und führt den Normalmodus-Befehl aus (im Beispiel, indem er den Cursor eine Zeile nach oben bewegt).Dies kann eine bequeme Möglichkeit sein, den Einfügemodus zu beenden, wenn Ihre Tastatur die Alt-Taste neben der Leertaste hat (so dass Sie mit dem Daumen drücken können und Ihre Finger in der Startzeile bleiben), solange Sie einen Terminal-Emulator verwenden mit diesem Verhalten und nichts dagegen, einen normalen Modus Befehl auszuführen.
quelle
single-normal-mode-key
? Du meinst Flucht?FWIW verwende ich:
Es fühlt sich an wie Return. Ich verwende es auch
;
als Führungslinie für andere Zuordnungen im Einfügemodus.Das einzige Mal, dass ich ';' + Buchstabe ist beim Code-Golfen; Ich hatte sonst keine Konflikte.
quelle
Ich benutze Ctrl+ 3seit einiger Zeit, finde es einfacher zu tippen als die meisten Alternativen und scheint gut zu funktionieren (zumindest unter Linux). Meine Caps Lockist zugeordnet Ctrl, daher ist es sehr bequem, sie einzugeben.
Ich habe versucht, Ctrl+ cfür einige Zeit zu verwenden, aber ich hatte einige Probleme damit, an die ich mich nicht genau erinnern kann, aber ich habe nicht genau dasselbe Verhalten Escwie jetzt mit Ctrl+ erhalten 3.
quelle
Esc
in Vanille Vim. Ich fand es empirisch, indem ich Kombinationen ausprobierte. Ich weiß nicht, wie die Interna funktionieren.Wenn Sie über eine US-englische Tastatur verfügen, entspricht das Drücken von Ctrl- dem [Drücken von Esc. Dies bietet eine einfache Möglichkeit, den Einfügemodus zu verlassen. Alternativ können Sie Ctrl- verwenden c.
Wenn Sie sich im einfachen Modus (
-y
) befinden, müssen Sie Ctrl- l(Strg-L) drücken , um den Einfügemodus zu beenden.Es gibt auch Ctrl+ , odie nur temporären Ausgang Insert - Modus nur einen Befehl auszuführen und zurück den Eingabemodus (siehe:
:help i_CTRL-O
)Oder Ctrl+ r, aber es ist nur für Inhalt des Registers oder Ausdruck einfügen, zB Ctrl+ r, =5*5(siehe:
:help i_CTRL-R
,:help c_CTRL-R
und Stackoverflow Post ).Lesen Sie mehr unter: Vermeiden Sie die Escape-Taste bei vim wikia
quelle
Ctrl+r
zum Einfügen von Registern (einschließlich des Ausdrucks=
reg). Wenn Sie vorübergehend einen einmaligen Befehl ausführen möchten, verwenden SieCtrl+o
.Ich habe mich
<A-e>
für die Flucht entschieden:Edit: Hab gerade herausgefunden, von
<C-\><C\n>
welchem anderen Modus du in den normalen Modus kommst. Es hat auch ein besseres Gesamtverhalten. Die Zuordnungen werden:quelle
Zum Beenden ordne ich die Registerkarte neu zu. Ich denke, in der Vergangenheit war dort der Esc-Schlüssel, also habe ich ihn verwendet und nie zurückgeschaut. Ich muss in einem Dokument kaum einen Tabulator einfügen, und wenn ich das tue, drücke ich einfach Umschalt + Tabulator. Ich habe die ursprüngliche Tab-Bindung noch nie verpasst.
quelle