Navigation im Einfügemodus

19

Ich entschied mich schließlich, die Pfeiltasten für die Navigation zugunsten von loszuwerden hjkl. Ich habe das Vim hardmodePlugin verwendet, um die Pfeiltasten zu deaktivieren.

Ich habe mich ziemlich schnell an die Navigation gewöhnt, aber es stellte sich heraus, dass die Navigation im Einfügemodus plötzlich unmöglich ist.

Gibt es dafür eine Lösung? (Vorhandener Einfügemodus ist keine Lösung).

stdcall
quelle
8
Ja: benutze die Pfeiltasten :-)
Dafür sind
@Carpetsmoker Wenn die Pfeiltasten verfügbar sind, würde ich sie anstelle von hjkl verwenden ....
stdcall
5
Die Idee ist jedoch, dass das Verlassen des Einfügemodus genau die Lösung ist (nämlich nur für das zu verwenden, wofür er gedacht ist, dh kleine Einfügungen, die mit anderen Befehlen durchsetzt sind) . Wenn ich mich nicht irre, habe ich es in der Hilfe gesehen. Wenn ich einen Link finde, werde ich es posten. Scheint, als hättest du dich zu sehr daran gewöhnt, nicht an die Pfeiltasten.
The Vee
Sie können Ihre Tastatur so einstellen, dass Pfeile als Abkürzung verwendet werden, z. B. <kbd> super </ kbd> + <kbd> j </ kbd>, um nach unten zu springen. <kbd> super </ kbd> kann eine beliebige Taste sein, zum Beispiel ist <kbd> Feststelltaste </ kbd> ziemlich verbreitet
ivanjermakov

Antworten:

25

Sie haben viele Möglichkeiten. Eine Option, und IMO ist die vernünftigste und einfachste, die Deaktivierung der Pfeiltasten zu beenden. Ich verstehe, warum viele Hardcore-Vimmer Dinge wie sagen

Sie sollten die Pfeiltasten nie wieder benutzen! Jedes Mal, wenn Sie die Pfeiltasten verwenden, verlieren Sie 3 Minuten Zeit, ein Welpe stirbt und jemand wechselt zu Emacs!

(Offensichtlich mache ich Witze) Es gibt jedoch einen Zweck für die Pfeiltasten. Sie sind äußerst nützlich für die Navigation:

  • Im Einfügemodus

  • In der Kommandozeile

Wenn Sie die Pfeiltasten nicht verwenden sollen, ist dies im Allgemeinen der Fall, weil Sie die Navigation auf eine vim-ähnliche Weise neu erlernen möchten. Wenn Sie mit hjklden Pfeiltasten vertraut sind und sie hauptsächlich im Einfügemodus verwenden, gibt es keinen guten Grund, sich dazu zu zwingen, sie nicht zu verwenden.

Option 2 besteht darin, die Zuordnung so ctrl-hjklzu ändern , dass sie wie Cursortasten wirkt. Das ist schön, weil Sie in der Homerow bleiben können und es gut zu dem Muskelgedächtnis passt, das Sie bereits hjklim normalen Modus gelernt haben . In der Tat ist es das, was ich tue . Der Hauptnachteil dieses Ansatzes besteht darin, dass die Einrichtung in Terminal Vim schwierig sein kann, da <C-j>ein NULByte erzeugt wird . Um das zu umgehen, benutze ich Gvim. Mir ist nicht bekannt, ob es eine einfache Lösung für Console Vim gibt oder nicht.

Option 3 dient zum <C-o>Ausführen kleiner Bewegungen im Normalmodus. Zum Beispiel, wenn Sie tippen

Hello world!
     cursor^

und du merkst, dass du ein Komma vergessen hast, anstatt es zu tun leftleftleftleftleftleft, könntest du einfach <C-o>b<C-o>hoder <C-o>2Fooder irgendeine andere Kombination von Bewegungen im normalen Modus machen, die du magst.

Natürlich ist eine andere Option, die ich sehr mag Esc, nur ein paar kleine Bewegungen zu machen, bevor ich in den normalen Modus zurückspringe. Sie haben erwähnt, dass Sie das lieber nicht tun, aber manchmal ist dies wirklich der effizienteste Weg.

Es gibt wahrscheinlich auch einige andere Ansätze, aber diese sind diejenigen, die ich mag, die für mich funktioniert haben.

DJMcMayhem
quelle
2
Interessant - ich stelle fest, Sie verwenden <c-o>gkund <c-o>gjanstelle von <Up>und <Down>. Warum das?
Kyle Strand
4
@kylestrand gkund gjgehen visuell eine Linie auf und ab, auch wenn die Linie umbrochen ist.
DJMcMayhem
4
Ich denke nicht, dass dies ausreicht, um eine Antwort für sich allein zu rechtfertigen, aber ich mag es, wenn die Pfeiltasten im normalen Modus deaktiviert sind (was mich gezwungen hat, HJKL zu lernen) und in allen anderen Modi aktiviert sind ( noremap <Up> <NOP>...) . Sie verbringen genug Zeit im normalen Modus, um HJKL zu lernen, aber sie sind da, wenn Sie es brauchen. Zumindest finde ich, dass dies ein angenehmer Mittelweg ist, um sie immer aus oder immer an zu lassen, und es ist nicht erforderlich, andere Tasten neu zuzuordnen (viele Leute wie Strg-HJKL, um zwischen den Fenstern zu wechseln).
Itai Ferber
Übrigens unterstützen BASH et al. Vi-Tastenkombinationen. Mit diesen Zuordnungen können Sie <ESC> und hjkl verwenden, um den Befehlsverlauf durchzugehen (hoch / runter) oder den aktuellen Befehl zu ändern (links / rechts)
Rolf
9

Ich verwende gerne die Steuertaste, um die hjklBewegungstasten in "universelle" Bewegungstasten zu verwandeln . Hier ist das relevante Stück von mir .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

Die inoremapAnweisungen gelten für den Einfügemodus, während die cnoremapAnweisungen für den Befehlsmodus gelten. (Ich verwende diese Zuordnung seit so langer Zeit, dass ich vergessen habe, ob es eine Möglichkeit gibt, im Befehlsmodusverlauf ohne sie zu navigieren.)

(Bearbeiten: Ich sehe, die andere Antwort hat diese Möglichkeit bereits erwähnt. Trotzdem kann es hilfreich sein, die tatsächlichen Zuordnungsbefehle zu sehen.)

Kyle Strand
quelle
3

Drücken Sie escdann hjklund wWbBund alle anderen Navigationen, die Sie machen möchten. Der springende Punkt des Hard-Modus ist, dass Sie lernen, mit komplexeren Vim-Bewegungen zu navigieren. Nehmen Sie kleine Änderungen vor und verschieben Sie sie dann im normalen Modus an eine neue Position.

Wenn Sie nicht lernen möchten, wie Sie mit aktiviertem Hardmode schneller navigieren, lesen Sie meine Antwort aus einer anderen Frage zum gleichen Thema.

Erzengel33
quelle
3

Wenn Sie mehr als EINE oder ZWEI Positionen verschieben möchten ...

... ist die beste Wahl, um zu schlagen ESC, sich zu bewegen und wieder in den Einfügemodus zurückzukehren.

Es macht keinen Sinn, Mappings <C-h>zu erstellen , die sich nach links bewegen und dann zu oft darauf schlagen. Als Vim-Benutzer sollten Sie nicht mehrmals dieselbe Taste drücken, um eine intelligente Bewegung zu erzielen.

(Wenn der ESCSchlüssel nicht in der Nähe Ihrer Finger liegt, ist es eine gute Option, eine Zuordnung dafür zu erstellen.)

Wenn Sie EINE oder ZWEI Positionen im Einfügemodus verschieben möchten ...

... eine gute Wahl wäre, einige Bewegungen mit Ihrem <Leader>Schlüssel zu definieren :

(Ich benutze es ,als <Leader>Schlüssel, da es sich für meine Finger angenehm anfühlt.)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward
rossijonas
quelle
1

Wenn Sie nur eine kleine Textmenge oder ein Wort ändern müssen, können Sie verwenden <Ctrl-O>h/j/k/l.

<Ctrl-O> Führt Sie nur für diesen Befehl in den normalen Modus zurück und wechselt dann wieder in den Einfügemodus. Dadurch sparen Sie einige Tastendrücke, wenn Sie für eine kleine Bewegung in den normalen Modus wechseln müssen.

Ref: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

alpha_989
quelle