Apakah mungkin untuk mendefinisikan objek teks dalam vim yang akan bertindak pada wilayah persegi panjang?
Misalnya, saya memiliki kolom teks yang disejajarkan secara vertikal, seperti ini:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Apakah mungkin untuk menentukan objek teks c
untuk kolom, sehingga dac
akan menghapus kolom, yac
akan menariknya, cac
akan mengubahnya, dan seterusnya?
(Aku tahu tentang Control-V untuk memilih wilayah persegi panjang, dan saya tahu Anda kemudian dapat menggunakan d
, y
, dll untuk menghapus, yank dll wilayah yang dipilih. Tapi aku secara khusus ingin tahu tentang apa yang mungkin menggunakan objek teks.)
cursor-motions
custom-text-object
Leah Velleman
sumber
sumber
Jawaban:
Ya, ini mungkin. @PeterRincker menunjukkan plugin textobj-kata-kolom , yang mendefinisikan empat objek teks (
ic
,ac
,iC
, danaC
) untuk kolom berbasis kata.Gagasan di balik fungsi ini adalah untuk membuat fungsi yang mendefinisikan gerakan berbasis kolom, dan kemudian memetakan fungsi ini secara tepat ke pemetaan mode visual / pilih dan pemetaan yang menunggu operator. Untuk menggunakan plugin yang disebutkan di atas sebagai contoh, itu membuat pemetaan berikut:
Di sini
TextObjWordBasedColumn(...)
mendefinisikan gerakan kolom dan dipetakan ke mode visual / pilih denganxnoremap
dan mode pending operator denganonoremap
. Perhatikan bahwa fungsi ini sedikit rumit untuk menangani indendasi dan untuk menemukan batas gerak yang sesuai.sumber
Apa itu mungkin? Benar! Kasus dan titik: textobj-word-column.vim .
Cara membuat objek teks Anda sendiri
Mode visual biasanya digunakan untuk membuat objek teks baru. Mode visual dapat berupa garis-bijaksana, karakter-bijaksana (biasanya), atau blok visual. Inilah dasar-dasar dari apa yang Anda butuhkan:
a{char}
atau dii{char}
mana{char}
deskriptif dan tidak digunakan. misalnyai/
sebagai objek teks antara/
.T/
t/
v
xnoremap
.onoremap
dan:normal
.Sekarang untuk contoh sederhana kami
i/
yang membuat objek teks antara/
:Selama Anda mengikuti bahan dasar Anda dapat membuat objek teks untuk segala macam hal.
Pembuatan objek teks tingkat lanjut dengan pengguna vim-textobj
The vim-textobj-pengguna plugin menyediakan cara yang umum untuk menentukan kustom teks-benda dengan cara yang lebih deklaratif. Sebagai contoh di sini adalah objek teks tag php:
Untuk bantuan lebih lanjut dengan vim-textobj-pengguna melihat bantuan doc nya:
:h textobj-user-introduction
.Untuk bantuan lebih lanjut
Serta halaman Membuat objek teks baru Vim wiki.
sumber