Insertar una línea en blanco en vim?

25

A menudo encuentro que necesito insertar una línea en blanco debajo o encima de la línea actual cuando edito en vim. oy Olo hará, pero posteriormente cambian al modo de inserción, lo cual es molesto. ¿Hay algún comando incorporado para hacer esto que permanecerá en modo normal?

Andrew Ferrier
fuente

Respuestas:

10

Tanto el complemento intacto de Tim Pope como mi propio complemento LineJuggler proporcionan [<Space>y ]<Space>asignaciones para agregar [count]líneas en blanco encima / debajo de la línea actual.

Básicamente, se reduce a esto:

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
fuente
Ahora uso esto, así que lo he marcado como la solución "correcta"; Pero todas las respuestas aquí son geniales.
Andrew Ferrier
Gran consejo, aunque preferí mapear <Space>oy en su <Space>Olugar.
simlev
26

He estado usando estos

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

en mi .vimrcpor años.

Presione Entrar para insertar una línea en blanco debajo de la actual, Mayús + Entrar para insertarla arriba.

Señor shunz
fuente
Estoy marcando esto correcto ya que es la solución más simple, aunque todas estas respuestas son buenas.
Andrew Ferrier
¡Tan sencillo! ¡Esta debería ser la respuesta aceptada!
Sheharyar
Si no desea que el cursor se mueva cuando presiona Enter, colóquelo al kfinal del primer mapa y jal final del segundo mapa.
zondo
1
Tenga en cuenta que la asignación Shift-Enter solo funciona con la versión GUI de vim, no con la versión del terminal. stackoverflow.com/questions/16359878/vim-how-to-map-shift-enter
ishmael
7

Otra forma más de insertar líneas arriba o abajo:

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

Tenga en cuenta que la solución de romainl y Mr Shunz moverá el cursor a la línea recién insertada, mientras que esta y también la de Ingo Karkat mantendrán el cursor en el mismo lugar.

toma dos
fuente
1

No, no hay un comando incorporado para eso.

Estas asignaciones hacen lo que quieres:

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