Bagaimana cara mengganti teks di antara tanda kutip di vi

106

Katakanlah saya memiliki baris kode ini:

$query = "SELECT * FROM table";

Apakah ada perintah di vi / vim yang dapat langsung menghapus semua yang ada di antara tanda kutip dan menempatkan kursor di antara keduanya sehingga saya dapat mulai mengetik?

Nikola
sumber

Jawaban:

182

Gunakan ci", yang artinya: ubah apa yang ada di dalam tanda kutip ganda.

Anda juga dapat memanipulasi objek teks lain dengan cara yang serupa, misalnya:

  • ci' - ubah di dalam tanda kutip tunggal
  • ciw - ubah dalam satu kata
  • ci( - ganti di dalam tanda kurung
  • dit - hapus di dalam tag HTML, dll.

Selengkapnya tentang objek teks vim yang berbeda di sini .

Eugene Yarmash
sumber
2
Sepertinya hanya bekerja dengan vim, tapi TIDAK vi. (Tidak yakin)
Ivan Chau
Bagi saya ini hanya berfungsi di baris saat ini, tidak di mana pun di dokumen.
Dan Akhirnya
perintah apa yang akan melakukan ini secara terbalik? Itu jika Anda ingin mengganti teks di dalam tanda kutip yang ada di belakang kursor.
dtburgess
1
@dtburgess: Salah satu caranya adalah F"ci".
Eugene Yarmash
ci 'dan ci "bekerja dengan baik, tetapi ci (tidak bekerja untuk saya. Ada yang tahu kenapa?
Vram Vardanian
24

Anda dapat memilih di antara tanda kutip dan kemudian delete ( d), change ( c) dll. Menggunakan

vi"

Demikian pula, Anda dapat mengganti tanda kurung, tanda kurung, elemen XML, dll. Jadi:

vi(
vi{
vit

atau untuk sekadar mengubah / menghapus, lakukan sesuai di", ci"dll Mengganti auntuk ikehendak meliputi elemen sekitarnya (sehingga Anda menandai atau mengubah kurung dan isi, misalnya)

Brian Agnew
sumber
5

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

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

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 ditautkan di atas untuk lebih jelasnya.

Anton Beloglazov
sumber
3

Dari sudah di dalam kutipan yang bisa Anda lakukan

di"

Bacalah sebagai hapus di dalam "

Sam Peacey
sumber
6
Kursor tidak harus berada di dalam string kutip ganda, karena perintah defaultnya adalah mengubah string seperti pertama di baris
Eugene Yarmash
1
Terima kasih, sangat senang mengetahuinya! Ini menunjukkan bahwa saya harus membaca hal-hal dengan lebih cermat. :)
Sam Peacey
3

Selain jawaban Brian, Anda juga dapat p(paste) dan y(yank) nilai baru, jadi jika Anda ingin mengganti nilai di dalam tanda kutip dengan nilai lain, Anda dapat melakukan yi"seleksi yang ingin Anda salin, vi"untuk memilih area yang ingin Anda ganti dan kemudian hanya puntuk mengganti nilainya dengan benar.

Ulisses Caon
sumber
0

Jawaban yang dipilih HANYA cocok untuk ViM tetapi TIDAK untuk vi. Pertanyaannya juga tidak akurat karena penulis tidak menyebutkan posisi awal kursor. Jika kita berasumsi bahwa kursor berada di dalam tanda kutip ganda maka untuk vi jawabannya adalah:

T"ct"

Dimana:

T "- mundur tepat setelah karakter"

c - ubah perintah

t "- memberikan posisi akhir untuk perintah c, di mana ia harus berhenti menghapus karakter, dengan kata lain rentang untuk diubah

pengguna1337
sumber