Beenden des Blockeinfügemodus mit Strg-C

8

Wenn Sie sich in vim im Blockeinfügemodus ( Ctrl-V, Shift-I) befinden und mit Ctrl-C(anstelle von Esc) beenden, wird die Blockbearbeitung abgebrochen (und nur die erste Zeile bearbeitet).

Warum ist das? In fast allen anderen Kontexten Ctrl-Cund Escsind auch. (Und im Idealfall gibt es einen Weg, dies zu beheben - ich habe mich jetzt Ctrl-Cdaran gewöhnt und es wäre eine Schande, wenn ich neu lernen müsste ...)

Sophie Alpert
quelle

Antworten:

9

Ctrl-cund Escsind nicht garantiert auch und unterscheiden sich oft. Zum Beispiel in Insert - Modus, Escwerden Abkürzungen auslösen und gehen Normalen Modus, während Ctrl-cnicht ausgelöst Abkürzungen noch der InsertLeaveautomatischen Befehl und gehen Sie direkt zum normalen Modus. Ein anderes Beispiel ist im alten viBefehlszeilenmodus, Escwürde den Befehl tatsächlich ausführen, als ob Sie getroffen hätten Enter. Vim änderte sich dies bewusst , denn das Verhalten nicht intuitiv und überraschend wurde erachtet wird , aber man kann es immer noch durch das Hinzufügen ermöglichen xzu 'cpoptions'.

Für die blockweisen visuellen Operatoren enthält das Hilfetag blockwise-operatorsdie folgende Dokumentation:

Visual-block Insert                     *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block.  Thus lines that are short will remain unmodified.  TABs are split to
retain visual columns.

Beachten Sie, dass nur Escerwähnt wird, nicht Ctrl-c.

Also nein Ctrl-cund Escsind nicht gleichwertig. Es ist niemals eine Schande, sich eines Missverständnisses zu entziehen. Sobald Sie dies erkannt haben, können Sie entscheiden, was als nächstes zu tun ist. Sofort naheliegende Optionen sind, die Unterschiede zu lernen und den richtigen Schlüssel zu verwenden oder zu entscheiden, dass Sie die Funktionalität eines der Schlüssel nicht benötigen, und ihn neu zuzuordnen, um ihn dem anderen anzupassen.

jw013
quelle
4
Erwischt. Im Moment werde ich vnoremap <C-c> <Esc>aber behalten, was du gesagt hast.
Sophie Alpert
@ BenAlpert: Sie benötigen nnoremap tatsächlich eine Inoremap mit denselben Werten, um vollständig zu Strg-C wie Esc zu wechseln. Ich benutze es seit Jahren so und es funktioniert perfekt für mich. Es ist eine Schande, dass andere vi-Varianten wie vile oder nvi diese Problemumgehung nicht zulassen, daher verpasse ich dort die abbr-Funktionalität.
Alex
0

Versuchen Sie, :map ^C escwo "^ C" über CTRL+ vdann CTRL+ eingegeben wird c.

nicht erfolgreich
quelle
Können Sie erklären, warum dies notwendig ist? Welche anderen Nebenwirkungen könnte es haben?
Sophie Alpert
Sie erfüllen leicht unterschiedliche Funktionen. STRG + C bedeutet herkömmlicherweise "Diese Aktion abbrechen" (in einem Unix-ähnlichen Kontext). Das Abbrechen der Aktion in Ihrem VIM-Kontext bedeutet "Stoppen Sie das Geschehen und kehren Sie zum normalen Modus zurück". Escape in vim bedeutet "Ich bin fertig, um zum normalen Modus zurückzukehren".
Donothings erfolgreich
In Bezug auf Nebenwirkungen habe ich keine bemerkt. STRG-C nach :!catscheint nach der Karte immer noch den gewünschten Effekt zu haben. Wenn Sie auf Probleme stoßen, können Sie versuchen, z. B. stty intr \^kan der Shell-Eingabeaufforderung, das Interrupt-Zeichen des Terminals in STRG-k zu ändern.
Donothings erfolgreich