2013-04-21 11 views
35

ich Zeilenumbrüche im normalen Modus in vim einfügen will mit Umschalt-Enter und Strg-Enter. Ich versuche, einige Lösungen und Mischlösungen aus Vim Wikia - Insert newline without entering insert mode aber Umschalt-Enter und Strg-Enter nicht ansprachen:eine neue Zeile einzufügen, ohne im Einfügemodus Eingabe vim

" put a new line before or after to this line 
nnoremap <S-CR> m`o<Esc>`` 
nnoremap <C-CR> m`O<Esc>`` 

" reverse J command 
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$ 
+0

Was ist dein '$ TERM' (if * nix)? – timss

+0

'echo $ TERM' ->' xterm' Warum? – helq

+0

Es kann relevant sein, wie die Schlüssel interpretiert werden. Verwenden Sie auch Bildschirm oder tmux? Davon abgesehen habe ich ein paar Alternativen ausprobiert, und es würde nur für "map o " hier funktionieren. – timss

Antwort

7

Aufgrund der Art und Weise, dass die Tastatureingabe intern gehandhabt wird, das ist leider nicht allgemein möglich heute. (Dieser Fall sollte jedoch in gVim arbeiten.) Einige Tastenkombinationen, wie Ctrl + nicht alphabetische nicht zugeordnet werden kann, und Ctrl + Brief gegen Ctrl + Umschalttaste + Brief kann nicht unterschieden werden. (Es sei denn, Ihr Terminal sendet einen eindeutigen Code dafür, was am meisten nicht ist.) Geben Sie im Einfüge- oder Befehlszeilenmodus die Tastenkombination ein. Wenn nichts passiert/eingefügt wird, können Sie diese Tastenkombination nicht verwenden. Dies gilt auch für <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> usw. (Einzige Ausnahme ist <BS>/<C-H>.) Dies ist ein bekannter Schmerzpunkt und Gegenstand verschiedener Diskussionen über vim_dev und den #vim IRC-Kanal.

Einige Leute (vor allem Paul LeoNerd Evans) wollen das beheben (auch für Konsole Vim in Terminals, die dies unterstützen), und haben various proposals schweben.

Aber bis zum heutigen Tag sind noch keine Patches oder Freiwilligen erschienen, obwohl viele den Wunsch geäußert haben, dies in einer zukünftigen Version von Vim 8 zu haben.

+0

scheint seltsam und komisch, danke für die Erklärung – helq

+0

Es ist vor allem aus historischen Gründen, aber leider ziemlich schwer zu ändern. –

39

Meine Alternative ist mit oo eine neue Zeile unter einzufügen, den Strom durch diese Abbildung (bzw. OO.) (Bzw. über.): nmap oo o<Esc>k (Resp. nmap OO O<Esc>j)

+0

Große Antwort. Einfach 'o' funktioniert und geht auch in den Einfügemodus. Danke – jpincheira

+0

Die Sache, die mich am meisten mit den anderen Antworten stört, war die Abkürzung. Dieser bevorzugt meine Vorlieben. – Canella

+0

Ich tat ** nmap o k ** seit Shift + J löscht newline. – Mo2

1

I verwendet werden: s/\ n/\ r \ r/g (ersetzen Sie den Zeilenumbruch durch zwei Zeilenumbrüche, die mit "o" identisch sind). Diese

+0

benötigt hierfür ein verkettetes Cabbrev – zzapper

1

ist das, was ich benutze:

nmap <CR> :a<CR><CR>.<CR> 

Ich versuchte nmap <CR> o<Esc>, aber es machte UI glitchy wie es Modus zum Einfügen wurde aktiviert bzw. deaktiviert wird.

-2

Sie können einen Hack verwenden, um dies zu tun.

Im Bearbeitungsmodus können Sie verwenden, um die aktuelle Zwischenablage einzufügen. Da o eine neue Zeile hinzufügt, können Sie o<ESC>ddp verwenden, um eine neue Zeile unter dem Cursor einzufügen; Von dort fügt eine neue Zeile hinzu, bis Sie etwas anderes löschen.