Katakanlah saya memiliki kode seperti ini ( |
mewakili posisi kursor ):
func1(x|, func2(), y);
Saya ingin mendapatkan:
func1(x|);
Apakah ada cara untuk menghapus kode dari posisi kursor ke posisi sebelum ujung kanan blok dalam saat ini ?
Saya tahu bahwa saya bisa pergi dengan dt).
tetapi saya bertanya-tanya apakah ada cara untuk mencampurnya dengan apa di)
.
cursor-movement
cursor-motions
Mateusz Piotrowski
sumber
sumber
C);
dalam kasus khusus ini.%
gerakan dapat melakukan apa yang Anda cari (yaitud%
).Jawaban:
Saya akan menggunakan
yang berarti hapus (
d
) ke '' '(])
) berikutnya yang tidak cocok.Lihat
:help ])
.sumber
Gerakan hanya berjalan dalam satu arah sedangkan objek teks hanya berjalan dalam dua arah.
Ini berarti bahwa Anda tidak dapat memiliki setengah dari objek teks kecuali Anda membuat gerakan tertunda operator kustom yang menggunakan objek teks di bawah tenda atau meniru perilakunya.
Dalam contoh Anda, teks yang dicakup oleh
i)
cukup mudah untuk divisualisasikan:tetapi bagaimana Anda memberi tahu Vim untuk beroperasi dari kursor ke akhir teks itu? Orang perlu membuat operator khusus suka
obi)
danoei)
(contoh semi-acak).sumber
ib
,imb
ke kanan daniMb
ke kiri, dan seterusnya (secara otomatis).Untuk kasus khusus ini saya akan melakukannya
dfy
Untuk kasus umum:
dT(
hapus dari kursor ke awal blokvib
pilih sisa blok dalamp
ganti blok dalam dengan apa yang baru saja Anda hapusAnda bisa membuatnya menjadi pemetaan.
sumber
Jawaban lain yang ada semua tergantung pada definisi vim dan deteksi blok. Strategi saya untuk penghapusan semacam ini adalah menggunakan
c
perintah yang dikombinasikan denganf
gerakan dan karakter aktual untuk dihentikan. Ini kemudian akan benar-benar menghapus karakter berhenti, tetapi karena itu juga merupakan tombol terakhir yang Anda tekan mengulanginya dua kali memiliki biaya nol, dan itu akan memasukkannya lagi sejakc
perubahan ke mode penyisipan.Untuk menjelaskan dengan contoh, untuk
perintah
c2f))
akan memberiyang pada awalnya mungkin tampak kurang elegan daripada beberapa jawaban lain, namun perhatikan bahwa strategi ini bersifat universal dan tidak tergantung pada definisi blok.
Misalnya dengan
perintah
cf>>
akan memberiAtau saat mengedit file csv suka
perintah
cf,,
akan memberiSaya sering menggunakan ini untuk menghapus sisa string, dari
untuk
dengan
cf\\
atau dari
untuk
dengan
cf""
.Ini memang mengubah posisi saat ini ke tempat yang sedikit berbeda dari yang diminta, dan juga berubah menjadi mode penyisipan. Tetapi saya ingin berbagi solusi masuk saya untuk menghapus apa pun yang tersisa.
sumber
cf
solusi adalah bahwa saya harus menentukan karakter di mana saya ingin berhenti menghapus. Pertanyaan bertanya apa yang harus dilakukan jika Anda tidak bisa hanya melakukancf)
karena ada lain)
sebelum)
Anda benar-benar ingin mencapai (misalnya ketika Anda ingin perubahanfunc(x|, g(x, x), x, x, g(x, x))
kefunc(x)
). Pada dasarnya, saya ingin tahu apakah saya dapat menghindari menekan.
setelahcf)
.t
alih-alihf
menghapus hingga tetapi tidak menyertakan karakter yang diberikan, jadi untuk contoh pertama Anda (func1(x|, func2(), y);
), Anda bisa menggunakand2t)
. Seperti @MateuszPiotrowski menyebutkan, itu bukan solusi umum dan mengharuskan Anda untuk mengetahui karakter yang ingin Anda hapus. Seperti yang biasanya Anda ketahui, karakter mana yang mengakhiri blok Anda menggunakan bahasa tertentu, itu tidak terlalu buruk.The vim-ninja-kaki Plugin mungkin apa yang Anda cari. Dari apa yang saya mengerti, itu membuat
d[
dand]
menjadi "hapus dari kursor untuk memulai / akhir objek teks", jadid]i)
harus "hapus sampai akhir kurung sekitarnya".sumber