Dalam vim, saya sering menemukan diri saya menghapus (atau menyalin) blok teks yang besar. Orang dapat menghitung baris teks dan berkata (misalnya) 50dd
untuk menghapus 50 baris.
Tetapi bagaimana cara seseorang menghapus blok teks yang besar ini tanpa harus tahu berapa banyak baris yang harus dihapus?
51dd
. Atau, gunakan perintah gerak -50d<down arrow>
:set rnu
dan Vim akan langsung melakukannya! Baris yang Anda gunakan masih akan dinomori secara total, tetapi baris di atas dan di bawah kursor akan simetris diberi nomor 1, 2, ... (dan perbarui dengan gerakan kursor, peristiwa level file, dll.)Jawaban:
Saya bukan guru vim, tetapi apa yang saya gunakan dalam keadaan ini adalah "mode visual". Dalam mode perintah, ketik
V
(huruf besar). Kemudian pindah ke atas / bawah untuk menyorot blok yang ingin Anda hapus (semua perintah gerakan biasa berfungsi). Kemudian hapus denganx
ataud
.sumber
.vimrc
membuatnya bertindak?Shift
-v
... Saya sedang mencoba menggunakanCTRL
kunci juga. Jadi ini berfungsi dan mungkin cara yang paling nyaman.CTRL
-v
) dan Blok Visual (Shift
-v
).Pergi ke garis awal dan ketik ma(tandai "a"). Lalu pergi ke baris terakhir dan masukkan d'a(hapus untuk menandai "a").
Itu akan menghapus semua baris dari saat ini ke yang ditandai (termasuk). Ini juga kompatibel dengan
vi
sertavim
, pada off kesempatan bahwa lingkungan Anda tidak diberkati dengan yang terakhir.sumber
/var/mail/username
secara massal, dan membiarkan email terakhir tetap utuh. Saya membuat tanda, lalu saya memasukkan misalnya50000
diikuti olehgg
untuk pergi ke baris 50.000, lalu saya menghapus semua baris di antaranya. bekerja seperti pesona!vim
sebagai alat untuk mengedit file gigabyte - Saya cenderung memilih alat pengolah teks sepertiawk
dan saudara-saudaranya :-)Anda dapat menggunakan mode visual juga (beberapa perintah dapat digunakan dengan opsi hapus juga) vip vapuntuk memilih paragraf, v2apuntuk memilih dua paragraf dapberfungsi d2apjuga. Anda dapat menghapus dalam blok
[
]
sukada[Untuk referensi: jenis-jenis objek. Dari dokumentasi vim: bagian 4. http://vimdoc.sourceforge.net/htmldoc/visual.html
sumber
dap
sangat mudah diingat sebagai "hapus paragraf"Ada banyak jawaban yang lebih baik di sini, tetapi untuk kelengkapan saya akan menyebutkan metode yang saya gunakan sebelum membaca beberapa jawaban hebat yang disebutkan di atas.
Misalkan Anda ingin menghapus dari baris 24-39. Anda dapat menggunakan perintah ex
Anda juga dapat menarik garis menggunakan
Dan temukan dan ganti hanya menggunakan 24-39 baris
sumber
Jika Anda mengaktifkan nomor baris via
set number
Anda dapat dengan mudahdNNG
yang akan menghapus ke baris NN dari posisi saat ini. Jadi Anda dapat menavigasi ke awal baris yang ingin Anda hapus dan hanyad50G
dengan asumsi itu adalah baris terakhir yang ingin Anda hapus.sumber
Itu semacam tergantung pada apa blok besar itu. Mungkin Anda hanya bermaksud menghapus paragraf yang dipakan dilakukan.
sumber
Ada beberapa kemungkinan, apa yang terbaik tergantung pada teks yang Anda kerjakan.
Ada dua kemungkinan yang muncul:
V
,,S-V
...), pilih teks dengan gerakan kursor dan tekand
dap
sumber
Jika seluruh blok terlihat di layar, Anda dapat menggunakan pengaturan nomor relativen. Lihat: bantu relativenumber. Tersedia dalam 7.3
sumber
Anda dapat menempatkan kursor di awal atau akhir blok dan memasuki mode visual (shift-v). Kemudian cukup naik atau turun sampai blok yang diinginkan disorot. Akhirnya, salin teks dengan menekan y atau memotong teks dengan menekan d.
sumber
Bersamaan dengan gerakan lain yang sudah disebutkan di sini, ada juga
/{pattern}<CR>
gerakan, jadi jika Anda tahu bahwa Anda ingin menghapus ke baris yang berisi foo, Anda bisa melakukannyadV/foo<CR>
.V
ada di sini untuk memaksa gerakan menjadi garis-bijaksana karena secara default/
karakter.sumber
Menghitung garis terlalu membosankan bagi saya, tetapi menghitung 'paragraf' tidak begitu buruk. '{' dan '}' memindahkan kursor ke baris kosong pertama sebelum dan sesudah kursor. Operasi pemindahan kursor dapat digabungkan dengan penghapusan, dan beberapa jawaban lain menggunakan pendekatan yang serupa (dd untuk satu baris, dG untuk akhir dokumen, dll.)
Misalnya:
Jika kursor Anda mulai di atas blok komentar, 'd}' menghapus blok komentar, dan 'd2}' menghapus baik blok komentar maupun blok kode. Jika kursor Anda mulai di bawah blok kode, 'd {' menghapus kode, dan 'd2 {' menghapus keduanya. Tentu saja, Anda dapat melewati satu blok dengan menggerakkan kursor terlebih dahulu: '{d {' atau '} d}'.
Jika Anda konsisten dengan spasi putih Anda, atau Anda dapat menghitung paragraf sekilas, ini akan berhasil. File bantuan Vim memiliki lebih banyak trik kursor jika Anda tertarik.
sumber
Anda juga dapat memasukkan angka yang sangat besar, dan kemudian tekan
dd
jika Anda ingin menghapus semua garis di bawah kursor.sumber
dG
, yang dihapus sampai akhir dokumen, sebagaiG
default untuk pergi ke baris terakhir.Menghapus satu blok teks
Dengan asumsi kursor Anda berada di awal blok:
Penjelasan
V
/^$<CR>
d
Ikatan kunci
Solusi yang lebih kuat:
Penjelasan
:set nowrapscan
D
kunci (untuk perintah berikut)::nnoremap D
V
/^\s*$\\|\%$<CR>
d
sumber