Bagaimana cara memilih antara kurung (atau kutipan atau ...) di Vim?

219

Saya yakin dulu ada plugin untuk hal-hal semacam ini, tetapi sekarang saya membutuhkannya, saya tidak bisa menemukannya (secara alami), jadi saya hanya akan bertanya yang bagus dan sederhana.

Apa cara termudah untuk memilih antara tanda kurung, atau kutipan, atau umumnya daftar karakter yang cocok?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Misalnya, di sini saya ingin memilih (a), atau Computed solution coefficients:.

Saya tidak tertarik pada multiline, hanya kasus yang terjadi pada satu baris.

Benteng
sumber

Jawaban:

276

Gunakan tombol navigasi apa pun yang ingin Anda masukkan ke dalam tanda kurung, maka Anda dapat menggunakan salah satu yi(atau yi)untuk menyalin segala sesuatu di dalam parens yang cocok. Ini juga berfungsi dengan tanda kurung (misalnya yi]) dan kurung kurawal. Selain itu y, Anda juga dapat menghapus atau mengubah teks (mis. ci), di]).

Saya mencoba ini dengan tanda kutip ganda dan tunggal dan tampaknya bekerja di sana juga. Untuk data Anda, saya lakukan:

write (*, '(a)') 'Computed solution coefficients:'

Pindahkan kursor ke C, lalu ketik yi'. Pindahkan kursor ke baris kosong, tekan p, dan dapatkan

Computed solution coefficients:

Sebagai CMS mencatat , karya ini untuk pilihan modus visual juga - hanya menggunakan vi), vi}, vi', dll

Tim Whitcomb
sumber
1
Saya biasanya mencari cara untuk memilih segala sesuatu di antara karakter pencocokan yang telah ditentukan (biasanya hanya kutipan tunggal dan ganda, dan tanda kurung dari semua jenis).
Benteng
2
Apa yang Anda maksud dengan kata-kata yang terpisah? Saya mencobanya pada "[x, y, z]" dan ia memilih "x, y, z"
Tim Whitcomb
4
Abaikan komentar terakhir - temukan apa masalahnya. Bekerja seperti pesona :-)
Rook
tampaknya bekerja dengan tanda kutip juga yi"memilih semua tanda kutip yang
hilang
ci(atau ci)apakah itu untuk apa yang saya cari. Terima kasih. Saya masih belum sepenuhnya memahami idalam kasus itu, tetapi siapa yang peduli selama itu berhasil, kan? :)
justnorris
279

Untuk memilih di antara tanda kutip tunggal saya biasanya melakukan vi' ("pilih tanda kutip tunggal dalam").

Di dalam blok kurung, saya menggunakan vib ("pilih blok dalam")

Di dalam blok kurung kurawal Anda dapat menggunakan viB(" huruf B")

Untuk membuat pilihan "inklusif" (pilih juga tanda kutip, kurung atau kawat gigi) Anda dapat menggunakan abukan i.

Anda dapat membaca lebih lanjut tentang pemilihan objek Teks pada manual, atau :help text-objectsdalam vim.

CMS
sumber
terima kasih atas tipnya, saya telah mencari dan meminta sesuatu yang serupa dan tidak puas dengan hasil saya. Luar biasa.
alfredodeza
tip ini sangat sederhana dan mudah dilakukan di dalam otak dan memori otot saya. Terima kasih.
Ghazaly
Ini tip yang sangat berguna. Tidak perlu lagi meraba-raba dengan penekanan tombol ekstra. Terima kasih atas tautannya.
Rai
27

Metode pemilihan ini terintegrasi dan tercakup dengan baik dalam bantuan Vim. Ini mencakup tag XML dan banyak lagi.

Lihat :help text-objects.

michael
sumber
1
: bantuan teks-objek semakin dekat dengan hal-hal yang bermanfaat ... Anda setidaknya bisa menyebutkan beberapa yang umum, seperti "dan (ketika dalam mode visual.
Stobor
2
(Juga, +1 karena meskipun menjadi vim pengguna lama, saya tidak tahu tentang ini!)
Stobor
@Stobor. Cheers memperbaiki referensi itu
michael
21

Untuk memilih dalam kutipan tunggal gunakan vi'.

Untuk memilih dalam kurung gunakan vi(.

Canopus
sumber
3
Catatan: ci'atau ci(untuk mengubah daripada memilih secara visual. Tapi itu tepat seperti yang saya inginkan. Terima kasih :)
justnorris
Yang kedua hanya berfungsi ketika dalam blok () itu, jadi biasanya saya lakukan %vi(atau%vib
816-8055
7

Gunakan panah atau hjkluntuk menuju ke salah satu ekspresi tanda kurung, lalu vuntuk memilih mode visual (yaitu memilih), lalu %untuk melompat ke braket lain.

Stobor
sumber
5
(sayangnya tidak mengutip, sayangnya ...)
Stobor
3

Tulis fungsi Vim di .vimrc menggunakan fungsi bawaan searchpair:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )

Adrian Panasiuk
sumber
2

Saya akan menambahkan detail ke jawaban yang paling banyak dipilih:

Jika Anda menggunakan gvim dan ingin menyalin ke clipboard, gunakan

"+<command>

Untuk menyalin semua konten di antara tanda kurung (atau tanda kurung atau kurung keriting)

Misalnya: "+yi}akan menyalin ke clipboard semua konten di antara kurung kurawal kursor Anda.

yuriploc
sumber
2
Ini sepenuhnya ortogonal untuk masalah dan seharusnya tidak menjadi jawaban. Anda dapat menulis ini pada setiap pertanyaan yang bertanya tentang y.
pipa
Ini merupakan tambahan untuk jawaban, bukan jawaban itu sendiri.
yuriploc
Maka itu harus menjadi edit untuk jawaban itu, posting ini apa adanya tidak menjawab pertanyaan.
pipa
Ini adalah iklan untuk TIDAK menggunakan gvim :) Siapa yang butuh dua shift + penekanan tombol ekstra dalam hidup mereka?
Paul Parker
1

Saya telah membuat plugin vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Ini menyediakan objek teks untuk pasangan kutipan terdekat dari jenis apa pun. Hanya menggunakan iqatau aqmemungkinkan Anda untuk beroperasi pada konten dari tanda kutip tunggal ('), ganda ("), atau kembali (`) yang saat ini mengelilingi kursor, berada di depan kursor, atau di belakang (dalam urutan pilihan itu) Dengan kata lain, itu melompat maju atau mundur ketika dibutuhkan untuk mencapai tanda kutip.

Lebih mudah dipahami dengan melihat contoh (kursor ditunjukkan dengan |):

  1. Sebelum foo '1, |2, 3' bar:; setelah menekan diq:foo '|' bar
  2. Sebelum foo| '1, 2, 3' bar:; setelah menekan diq:foo '|' bar
  3. Sebelum foo '1, 2, 3' |bar:; setelah menekan diq:foo '|' bar
  4. Sebelum foo '1, |2, 3' bar:; setelah menekan daq:foo | bar
  5. Sebelum foo| '1, 2, 3' bar:; setelah menekan daq:foo | bar
  6. Sebelum foo '1, 2, 3' |bar:; setelah menekan daq:foo | bar

Contoh di atas diberikan untuk tanda kutip tunggal, plugin bekerja dengan cara yang persis sama untuk tanda kutip ganda (") dan kembali (`).

Anda juga dapat menggunakan operator lain: ciq, diq, yiq, viq, dll

Silakan lihat halaman github yang tertaut di atas untuk lebih jelasnya.

Anton Beloglazov
sumber
-6

Keymap sederhana di vim akan menyelesaikan masalah ini. map viq F ”lvf” hh Perintah di atas memetakan viq ke tombol untuk mencari di antara tanda kutip. Ganti "dengan karakter apa pun dan buat keymaps Anda. Tempelkan ini di vimrc selama startup dan Anda harus dapat menggunakannya setiap kali.


sumber