Bewegen Sie den Cursor im Einfügemodus ohne Pfeiltasten um ein Zeichen

8

Das mag etwas zu übertrieben erscheinen, aber ich bin zu vim gewechselt und freue mich jetzt sehr über den Workflow. Ich versuche mich zu disziplinieren, die Pfeiltasten nicht zu benutzen, da es beim Schreiben so wichtig ist, die Hände immer auf den Alfa-Tasten zu halten. Wenn ich also navigieren muss, verlasse ich den Einfügemodus, gehe in den normalen Modus und kehre in den Einfügemodus zurück.

Es gibt eine Ausnahme, bei der dies tatsächlich störender ist: Ich verwende es clang completemit Snippets und super tabdas ist großartig. Außer jedes Mal, wenn eine Funktion automatisch ausgeführt wird, nachdem ich die Parameter eingegeben )habe, bleibt mir zuvor der Cursor. Um fortzufahren, muss ich den Cursor ein Zeichen nach rechts bewegen. Wie Sie sich vorstellen können, passiert dies sehr oft .

Die einzigen Optionen, die ich habe (soweit ich weiß) sind: Esclaoder , und ich bin über keine von beiden glücklich. Beim ersten Mal drücke ich 3 Tasten für eine einfache Bewegung des 1-Zeichen-Cursors, beim zweiten Mal bewege ich meine Hand zu den Pfeiltasten. Eine dritte Option wäre die Zuordnung CTRL-Loder Zuordnung zu .

Was ist der beste Weg, dies zu tun?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| bezeichnet die Cursorposition

Bolov
quelle
Mit einem ähnlichen Problem habe ich das Abschlussskript gehackt, damit es nicht wieder geschlossen wird, )wenn die Funktion mindestens ein Argument enthält. Also tippe ich es von Hand. Viel nützlicher jetzt.
Dmitry Frank
Was passiert, wenn Sie tippen? )Ich wette, es wird übersprungen, ohne dass es tatsächlich eingefügt wird. (Ich benutze dieses Plugin nicht)
FDinoff
@FDinoff nein, es fügt nur eine andere ein)
Bolov
1
@ Bolov das ist enttäuschend. Möglicherweise können Sie den Code, der dies tut, aus automatischen Paaren extrahieren . Ich habe keine Ahnung, ob die Plugins in Konflikt geraten könnten. Die andere Option besteht darin <C-O>l, für 1 Normalmodusbefehl in den Normalmodus zurückzukehren.
FDinoff

Antworten:

5

Map ), um das Vorhandene zu überspringen, )wenn es sich um eine schließende Klammer handelt

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Entnommen aus: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Alte Antwort

:h i_CTRL-O Führen Sie einen Befehl aus und kehren Sie in den Einfügemodus zurück.

Ctrl-ol Sie werden um ein Zeichen nach rechts verschoben und kehren dann in den Einfügemodus zurück.

Alternativ können Sie bei einigen Bracket-Plugins auch nur die schließende Bracket eingeben, )und die vorhandene wird überschrieben.

Brett Y.
quelle
1
Dies funktioniert nicht, wenn )es sich um das letzte Zeichen in der Zeile handelt (und dies geschieht häufig, wenn Sie Code schreiben). CTRL-O afunktioniert jedoch. Wir haben also einen Schlüssel gespeichert. :)
Bolov
True del )besteht nur aus zwei Zeichen und wird immer nach der schließenden Klammer stehen.
Brett Y
Das ')' zu überspringen funktioniert wie ein Zauber, danke
Bolov
0

Geben Sie Folgendes ein, um die Steuertasten zu finden, die im Einfügemodus verwendet werden.

:help insert-index

Strg-B wird nicht verwendet, aber Sie möchten möglicherweise einen anderen Schlüssel opfern.

imap <c-b> <right>

Dies funktioniert, um den Cursor um ein Zeichen nach rechts zu bewegen. Oder kartieren Sie ein Doppelzeichen.

imap jj <right>
Besenhacker
quelle