Apakah ada perintah untuk menghapus garis (atau n baris) di atas yang sekarang? Di atas = saat ini tidak termasuk.
Yaitu, apakah ada alternatif dkyang tidak menghapus baris saat ini? Mirip dengan cara o/ Odan p/ Pbekerja, tetapi dengan penghapusan.
Saat ini, saya sedang melakukan kdd, yang menggerakkan kursor satu baris ke atas dan menghapusnya. Saya bisa melakukannya nnoremap <Leader>d kdd
dan nnoremap <Leader>D jdd-
, tetapi memiliki alternatif yang tidak memindahkan kursor sepertinya pilihan yang lebih baik. Apakah ada?
key-bindings
cursor-movement
normal-mode
Martin Tóth
sumber
sumber
nnoremap <Leader>d kddj
dannnoremap <Leader>D jddk
?kddj
ataujddk
, posisi kolom tidak dipertahankan. Saya tidak mengatakan itu masalah besar, tapi itu menjengkelkan. Sebagai catatan,kddj
pindahkan kursor 1 baris di bawah posisi semula. Danjdd-
sepertinya alternatif yang lebih baikjddk
karena setidaknya saya kembali ke karakter non white space pertama. Jika baris di bawah yang ingin saya hapus kosong, saya tertinggal di awal baris.Jawaban:
memotong garis di atas garis saat ini.
memotong garis ke-5 di atas garis saat ini (tetapi menggerakkan kursor).
memotong 5 baris di atas garis saat ini.
memotong 5 baris di bawah garis saat ini.
sumber
EDIT Saya tidak tahu fitur bawaan yang disarankan oleh @Romainl dalam jawabannya: tentu saja
-d
dan+d
metode harus lebih disukai karena cara yang lebih sederhana daripada menambahkan fungsi ke.vimrc
Mungkin menambahkan sesuatu seperti itu ke Anda
.vimrc
bisa seperti yang Anda inginkan:Fungsi-fungsi ini menghapus garis di bawah atau garis di atas yang sekarang dan kembali ke posisi sebelum penghapusan.
Untuk fungsi,
DeleteOver()
kita perlu naik satu barisnormal k
setelah penghapusan karena penghapusan mengubah jumlah baris asli yang tidak cocok denganDeleteUnder()
Anda juga dapat menambahkan ini ke
.vimrc
Untuk membuat pemetaan yang memanggil fungsi.
sumber
nostartofline
opsi.Jika kita menggunakan register penghapusan kecil "-, kita dapat mengembalikan posisi kursor setelah menghapus n baris di atas.
Misalnya, d0dgk"-Pmenghapus di atas 1 baris dan mengembalikan kursor ke tempat semula.
d0menghapus karakter dari kursor ke karakter pertama dari baris. Karena 0gerakan eksklusif, karakter di bawah kursor tidak dihapus. Dan karakter yang dihapus dimasukkan ke dalam regsiter penghapusan kecil "-.
dgkmenghapus di atas 1 baris. Ini akan meninggalkan garis saat ini, karena gktidak secara linier dan eksklusif.
"-P menempatkan teks dari register delete kecil "-.
Ini semacam peretasan. Tetapi jika Anda mencari perintah non-ex, pertimbangkan untuk menggunakannya.
sumber
"-P
tidak mau"-p
. Yang terakhir mengacaukan teks sedikit.Mungkin Anda akan meningkatkan alur kerja Anda jika tidak takut untuk ... melompat :)
Contoh:
Tindakan Anda (mode normal, kursor pada
_
):/I want
Enter
5dd
Ctrl-o
. Itu dia.Tentu saja, jawaban romainl adalah yang terbaik jika semua yang Anda ingin hapus seluruh baris, dan Anda dapat menghitung offset mereka dengan mudah (menggunakan linenumbers relatif misalnya). Di atas adalah cara yang lebih umum untuk "bertindak": pergi ke sana, menggunakan sesuatu yang dianggap sebagai lompatan: ini berarti Anda selalu dapat melompat kembali, setelah Anda memodifikasi teks.
Misalnya, jika Anda menggunakan nomor baris absolut, Anda dapat mengganti
/I want
Enter
dengan sesuatu seperti78gg
atau78G
untuk melompat langsung ke nomor baris itu.sumber
Berdasarkan solusi ms-kim, saya telah mengembangkan variasi yang sedikit berbeda yang menghemat posisi.
OBS: Saya juga menggunakan posting ini sebagai referensi.
sumber
Jika Anda ingin menghapus garis duplikat di seluruh file, lakukan saja hal berikut:
Contoh:
Dalam mode perintah
Jika Anda hanya ingin daftar string pada awalnya:
sumber