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?

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 .


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)


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.


3

Dari sudah di dalam kutipan yang bisa Anda lakukan

di"

Bacalah sebagai hapus di dalam "


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.