Einfügen einer Leerzeile in vim?

25

Ich stelle ziemlich oft fest, dass ich beim Bearbeiten in vim eine leere Zeile entweder unter oder über der aktuellen Zeile einfügen muss. ound Otun dies, aber sie wechseln anschließend in den Einfügemodus, was ärgerlich ist. Gibt es einen eingebauten Befehl, der im normalen Modus verbleibt?

Andrew Ferrier
quelle

Antworten:

10

Sowohl das unbeeinträchtigte Plugin von Tim Pope als auch mein eigenes LineJuggler-Plugin bieten [<Space>und ]<Space>Zuordnungen zum Hinzufügen von [count]Leerzeilen über / unter der aktuellen Zeile.

Im Grunde läuft es darauf hinaus:

nnoremap <silent> ]<Space> :<C-u>put =repeat(nr2char(10),v:count)<Bar>execute "'[-1"<CR>
nnoremap <silent> [<Space> :<C-u>put!=repeat(nr2char(10),v:count)<Bar>execute "']+1"<CR>
Ingo Karkat
quelle
Ich benutze dies jetzt, also habe ich dies als die "richtige" Lösung markiert. Aber alle Antworten hier sind großartig.
Andrew Ferrier
Toller Tipp, obwohl ich lieber mape <Space>ound <Space>Ostattdessen.
Simlev
26

Ich habe diese verwendet

map <Enter> o<ESC>
map <S-Enter> O<ESC>

in meinem .vimrcseit Jahren.

Drücken Sie die Eingabetaste , um eine leere Zeile unter der aktuellen einzufügen , und die Umschalttaste + Eingabetaste , um sie über der aktuellen einzufügen.

Herr Shunz
quelle
Ich bezeichne dies als die einfachste Lösung, obwohl all diese Antworten gut sind.
Andrew Ferrier
So einfach! Dies sollte die akzeptierte Antwort sein!
Sheharyar
Wenn Sie nicht möchten, dass sich der Cursor bewegt, wenn Sie die Eingabetaste drücken, platzieren Sie ihn kam Ende der ersten Karte und jam Ende der zweiten Karte.
Zondo
1
Beachten Sie, dass die Zuordnung von Umschalt + Eingabetaste nur mit der GUI-Version von vim funktioniert, nicht mit der Terminalversion. stackoverflow.com/questions/16359878/vim-how-to-map-shift-enter
ishmael
7

Noch eine andere Möglichkeit, Zeilen oberhalb oder unterhalb einzufügen:

nnoremap <Enter> :call append(line('.'), '')<CR>
nnoremap <S-Enter> :call append(line('.')-1, '')<CR>

Beachten Sie, dass die Lösung von romainl und Mr Shunz den Cursor auf die neu eingefügte Zeile bewegt, während diese und auch die von Ingo Karkat den Cursor an derselben Stelle belassen.

Nimm zwei
quelle
1

Nein, dafür gibt es keinen eingebauten Befehl.

Diese Zuordnungen machen, was Sie wollen:

nnoremap <leader>o o<Esc>
nnoremap <leader>O O<Esc>
romainl
quelle