Memasukkan baris kosong di vim?

25

Saya cukup sering menemukan saya perlu memasukkan baris kosong di bawah atau di atas baris saat ini saat mengedit di vim. odan Oakan melakukan ini, tetapi mereka kemudian beralih ke mode insert, yang menjengkelkan. Apakah ada perintah bawaan untuk melakukan ini yang akan tetap dalam mode normal?

Andrew Ferrier
sumber

Jawaban:

10

Baik plugin Tim Pope yang tidak rusak maupun plugin LineJuggler saya sendiri menyediakan [<Space>dan ]<Space>memetakan untuk menambahkan [count]baris kosong di atas / di bawah baris saat ini.

Pada dasarnya, intinya adalah:

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
sumber
Saya sekarang menggunakan ini, jadi saya telah menandai ini sebagai solusi "benar"; tetapi semua jawaban di sini bagus.
Andrew Ferrier
Tip yang bagus, meskipun saya lebih suka memetakan <Space>odan <Space>Osebaliknya.
simlev
26

Saya sudah menggunakan ini

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

di saya .vimrcselama bertahun-tahun.

Tekan Enter untuk memasukkan garis kosong di bawah ini, Shift + Enter untuk memasukkannya di atas.

Tuan Shunz
sumber
Saya menandai ini dengan benar karena ini adalah solusi paling sederhana, meskipun semua jawaban ini baik.
Andrew Ferrier
Sangat sederhana! Ini harus menjadi jawaban yang diterima!
Sheharyar
Jika Anda tidak ingin kursor bergerak ketika Anda menekan Enter, letakkan kdi akhir peta pertama dan jdi akhir peta kedua.
zondo
1
Perhatikan bahwa pemetaan Shift-Enter hanya berfungsi dengan versi GUI dari vim, bukan versi terminal. stackoverflow.com/questions/16359878/vim-how-to-map-shift-enter
ishmael
7

Cara lain untuk menyisipkan baris di atas atau di bawah:

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

Perhatikan bahwa solusi dari romainl dan Mr Shunz akan memindahkan kursor ke baris yang baru dimasukkan, sedangkan ini dan juga yang dari Ingo Karkat akan menjaga kursor di tempat yang sama.

ambil dua
sumber
1

Tidak, tidak ada perintah bawaan untuk itu.

Pemetaan ini melakukan apa yang Anda inginkan:

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