Menghapus Di Vim dan Kemudian Menempel Tanpa Baris baru

11

Sering kali dalam vim saya ingin menghapus satu baris sepenuhnya, jadi saya menggunakan dd. Namun, saya kemudian perlu menempelkan garis itu ke posisi lain di dalam garis, tetapi ini menyisipkan baris baru sebelum ditempelkan, oleh karena itu, membuat saya sangat sulit untuk mendapatkan hasil yang diinginkan. Sebagai contoh,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

ketika saya melakukan ini dengan kode di atas saya dapatkan:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

yang sangat jauh dari hasil yang saya inginkan ... bagaimana saya bisa menekan perilaku baris baru ini, atau menggunakan metode lain yang melakukannya dengan sangat efisien? Saya pikir d $ tidak bagus karena saya tidak hanya harus pergi ke awal baris, tetapi jika saya ingin menghapus baris kosong juga saya perlu menghapusnya di register lain, saya merasa harus ada cara yang lebih mudah! Terima kasih.

untukmu
sumber
1
itu bukan duplikat, seperti yang saya katakan saya ingin cara yang lebih efisien kemudian pergi ke awal baris, juga saya benar-benar ingin menghapus baris lengkap dengan karakter baris baru .... bukan hanya isi baris
fYre
Oh, aku mengerti maksudmu sekarang. Bagi saya tidak jelas apa yang ingin Anda capai.
EvergreenTree
1
0Dhapus baris kecuali putus baris. Dan daripada gJbergabung dengan garis. Sekarang Anda dapat meletakkan teks tanpa garis putus-putus dan tanpa garis kosong.
Alex Kroll

Jawaban:

9

Anda dapat pergi ke mana saja di baris di atas garis yang ingin Anda hapus, lalu tekan JDdan tempel dengan ppada titik yang diinginkan.

  • Jbergabung dengan dua baris dan memindahkan Anda di awal teks yang ingin Anda hapus. Ini menghapus karakter baris baru dan lekukan garis yang ingin Anda pindahkan.
  • D menghapus dari posisi kursor saat ini ke akhir baris tetapi mempertahankan karakter baris baru.

Petunjuk: Anda dapat menggunakan :pujika Anda menghapus Datau menarik dengan y$dan Anda ingin menempel dengan baris baru.

Hajo
sumber
3

Tidak terlalu sederhana, tetapi sedikit lebih efisien, dan Anda juga dapat membuat peta mode normal untuk kedua urutan:

  • menarik: pergi ke garis yang ingin Anda pindahkan, lalu ^D"_dd
  • menempel: pergi ke kata yang ingin Anda ganti, lalu viwp
lcd047
sumber
2

Anda dapat mencapai sesuatu yang bekerja dengan sangat baik dengan imap. Tambahkan yang berikut ke Anda vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Ini akan membuat pemetaan untuk CTRL-aitu akan menempelkan teks yang terakhir dihapus (dengan ddatau serupa). Jika Anda mau, tentu saja Anda dapat menggunakan kunci yang berbeda untuk pemetaan.

Referensi:

:h i_CTRL-R
:h quote1
:h J
Karl Yngve Lervåg
sumber
1

Ini juga muncul untuk saya, tidak pernah berpikir untuk mengoptimalkannya sebelumnya tetapi pemetaan ini berfungsi:

nmap dil ^d$

diladalah "delete sejalan", mirip dengan diw, di", dll

flukus
sumber
1

Rekatkan tanpa baris baru

Masukkan ini ke dalam file .vimrc Anda:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Contoh:

<span style="color:">danger</span>

Sekarang Anda dapat mengetik gpuntuk memasukkan #D51B3Fsetelah color:saat kursor saya berada :dalam mode Normal.

Tarik tanpa baris baru

Gunakan jawaban flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

sebagai akronim dari menghapus garis dalam . Ini juga menghilangkan lekukan utama.

trebucherry
sumber
0

Anda dapat memilih teks yang ingin Anda salin dengan menekan vdan kemudian membawanya ke buffer dengan menekan ylalu menempelkannya ke mana saja p. Itu tidak memasukkan baris baru.

Varun Agarwal
sumber
Benar, tetapi ini masih meninggalkan garis kosong.
muru