Saat menggunakan ci"kursor tidak harus berada di area yang dikutip ganda.
|String somestring = "some text";
Dengan asumsi pipa adalah posisi kursor, ci"akan membuatnya melompat ke area yang dikutip.
Di sisi lain, saat menggunakan ci(, kursor harus berada di dalam tanda kurung agar berfungsi dan tidak akan memindahkan kursor di dalamnya.
Apa alasan perbedaan perilaku ini? Saya berasumsi ada cara untuk memetakan kunci sehingga perilaku ini ada. Apakah ada kelemahan untuk melakukan ini?
cursor-motions
cursor-movement
Perampok
sumber
sumber
Jawaban:
Perbedaan utama di sini adalah bahwa pernyataan tanda kurung (ditargetkan oleh
ci(
) dapat disarangkan, sedangkan string yang dikutip (ditargetkan olehci"
) tidak dapat.Jika kursor Anda berada di luar beberapa pernyataan tanda kurung, itu mungkin masih di dalam dari yang lain. Misalnya (
*
menandai posisi kursor):Baris tempat kursor berada
(1, 2, 3)
, tetapi kursor juga berada di dalamarray(...)
blok yang lebih besar . Dalam hal ini, yang lebih besar adalah target yang tepatci(
.Jika kursor Anda berada di luar string yang dikutip, karena mereka tidak dapat disarangkan, tidak ada hal yang masuk akal untuk dilakukan. Jadi, Vim mengambil keuntungan dan menemukan string yang dikutip pertama di telepon.
sumber
Keluarga kutipan dari objek teks (
i'
,i"
,a'
, dana"
) yang berbeda dari sisa dari objek teks dalam bahwa mereka hanya melihat baris saat ini. Karena ini, pilihan dibuat untuk tidak memerlukan kursor berada dalam tanda kutip. Sebagai gantinya, Vim akan mencari ke depan dalam baris untuk menemukan string yang dikutip ketika kursor belum ada di dalam satu.Ada diskusi di sekitar beberapa tambalan yang akan memungkinkan perilaku pencarian maju ini diimplementasikan untuk objek teks berbasis blok juga.
sumber
Jawaban lain mencakup mengapa ini terjadi. Ini cara yang bagus untuk mengatasinya.
wellle / target.vim . Saya baru saja menemukan plugin ini, dan saya pikir itu sangat diremehkan. Ini menyediakan objek teks baru:
din(
Mnemonic:. (D) apus (i) nside (n) ext "(" ini kompatibel dengan operator lain dan beberapa objek yang berbeda, sepertian(
,in"
,il(
(dalam kurung terakhir)Ini juga mengesampingkan perilaku default
i(
sehingga pertama kali terlihat untuk melihat apakah kursor ada dalam tanda kurung, dan kemudian jika tidak berfungsi dengan cara yang samain(
. Perilaku ini dapat dihidupkan atau dimatikan. Sebagai contoh:Mengetik
ci(
bertindak sama dengancin(
, karena kursor tidak ada dalam tanda kurung.Ini juga menerima hitungan:
Mengetik
c2in(
:Ini juga menyediakan objek baru, "argumen". Misalnya,
dana
berarti "Hapus di sekitar argumen berikutnya". Ini juga menerima hitungan. Sebagai contoh:Mengetik
d3ana
:Ada banyak fitur lain yang dimiliki plugin ini, tetapi ini adalah yang mendasar.
sumber