Cara memasukkan baris baru tanpa meninggalkan mode normal


24

Saya ingin tahu apakah saya dapat memasukkan baris baru tanpa meninggalkan mode normal. Misalnya, saya punya dua baris:

this is line one
this is line two

Dan kursor ada di baris satu. Sekarang saya ingin baris baru antara baris satu dan dua, seperti ini:

this is line one

this is line two

Saya tahu bahwa ketika saya dalam mode normal, saya cukup menekan o. Tapi ini akan masuk ke mode insert.

Bagaimana saya bisa memasukkan baris baru seperti dan tetap dalam mode normal?


Jawaban:


10

Saya menggunakan pemetaan untuk itu:

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

Dengan cara ini Anda dapat memasukkan garis di bawah kursor Anda dengan <Leader>odan satu di baris sebelumnya dengan <Leader>O.

Catatan: Seseorang dapat berargumen bahwa ini membutuhkan sebanyak mungkin penekanan tombol o<Esc>tetapi mudah-mudahan Anda memilih pemimpin Anda untuk membuat pemetaan seperti ini mudah. Juga saya benar-benar tidak yakin ada cara bawaan untuk melakukan ini.


8

Solusi yang tidak melalui mode penyisipan, tidak menggerakkan kursor, dan memungkinkan Anda menggunakan penghitung untuk menambahkan beberapa baris sekaligus ( 3\odll.):

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

5

Saya pribadi merekomendasikan menggunakan plugin Tim Pope Unimpaired . Ini menyediakan banyak pemetaan tetapi yang akan Anda cari adalah [<space>dan ]<space>yang membuat garis-garis kosong di atas dan di bawah garis saat ini masing-masing. Unimpaired juga menyediakan pemetaan yang bagus untuk bergerak melalui daftar perbaikan cepat, daftar buffer, opsi beralih, dan banyak lainnya. Lihat :h unimpairedlebih lanjut.

Jika Anda tidak ingin menggunakan plugin yang tidak rusak tetapi seperti pemetaan di bawah ini adalah beberapa pemetaan cepat untuk dimasukkan ke dalam ~/.vimrcfile Anda :

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

5

Jika Anda tidak ingin menambahkan pemetaan, Anda dapat menarik yygaris kosong dan kemudian menempelkan di pbawah kursor dan di Patas kursor.


Ini mungkin jawaban terbaik tanpa pemetaan.
Willem van Ketwich

Atau simpan ke oregister dengan "oyydan tempel dari sana kapan pun diperlukan "op.
mike23

4

Pemetaan saya menggunakan Shift-Enter. Ini berbeda dari yang lain di mana kursor dikembalikan ke baris dan kolom yang sama menggunakan tanda o.

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
Perhatikan bahwa pemetaan <S-Enter>tidak berfungsi di emulator terminal (hanya berfungsi di gVim). Jadi, Anda harus memilih kombinasi tombol yang berbeda untuk memetakannya ke ;-)
Martin Tournoij

2

Jawaban Maxim Kim ini mengubah hidup:

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

dan riff saya di atasnya:

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

Masukkan garis-garis itu di Anda vimrc. Lalu pergi ke awal baris kedua file Anda dan memukul Space, Enteratau pergi ke akhir baris pertama dan hit Shift+Space, Enter. Entah akan menambahkan baris kosong antara baris pertama dan kedua, dan membuat Anda dalam mode normal.

Anda juga dapat menggunakan ini untuk satu tombol tunggal - tekan Spaceatau Shift+Spacediikuti oleh tombol yang Anda inginkan dan itu akan memasukkan atau menambahkannya, masing-masing.


2

Pemetaan ini akan melakukan apa yang Anda cari.

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

Ini memasukkan n sejumlah baris baru sebelum atau setelah kursor; menjaga kursor tepat di tempatnya, tanpa mengubah daftar lompatan.

Solusi lain adalah dengan hanya membuat jalan pintas yang mengisi register tanpa nama dengan baris baru. Kemudian Anda bisa menggunakan perintah put, p atau P untuk menyisipkan baris baru. Sebagai contoh:

nnoremap "<cr> :let @@="\n"<cr>

1

Pemetaan saya untuk ini

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

Berbeda dari statox karena ini menjaga kursor di lokasi yang sama.


apa <silent>artinya
Alex

Ini mencegah pengulangan apa pun ke baris status. Saya cukup yakin itu tidak melakukan apa pun dalam kasus khusus ini, itu hanya ada di mana pun saya awalnya menyalinnya, dulu. Lihat :h map-silent.
Kevin

-1

Solusi pribadi saya memasukkan karakter baris baru ke dalam register ekspresi dan menempelnya setelah baris saat ini, kemudian melompat kembali ke posisi semula:

nnoremap K m`"="\n"<CR>p``
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.