Vi'deki alıntılar arasındaki metin nasıl değiştirilir


106

Bu kod satırına sahip olduğumu varsayalım:

$query = "SELECT * FROM table";

Vi / vim'de, tırnak işaretleri arasındaki her şeyi anında silebilen ve imleci aralarında konumlandırarak yazmaya başlayabilmem için bir komut var mı?

Yanıtlar:


182

Kullanım ci"çift tırnak içine değişim neyi: demektir.

Diğer metin nesnelerini de benzer şekilde değiştirebilirsiniz, örneğin:

  • ci' - tek tırnak içinde değişiklik
  • ciw - bir kelimenin içinde değişiklik
  • ci( - parantez içinde değiştirin
  • dit - bir HTML etiketi, vb. içinde silin.

Farklı vim metin nesneleri hakkında daha fazla bilgiyi burada bulabilirsiniz .


2
Sadece birlikte çalışıyor gibi görünüyor vim, ama DEĞİL vi. (Emin değilim)
Ivan Chau

Benim için bu sadece geçerli satırda çalışıyor, belgenin herhangi bir yerinde değil.
Ve Sonunda

o zaman hangi komut bunu geriye doğru yapacaktı? Yani, imlecin arkasındaki tırnak içindeki metni değiştirmek istiyorsanız.
dtburgess

1
@dtburgess: Bir yolu var F"ci".
Eugene Yarmash

ci 've ci "iyi çalışıyor, ancak ci (benim için çalışmıyor. Herhangi bir fikri olan var mı?
Vram Vardanian

24

Tırnak işaretleri arasında seçim yapabilir ve ardından silebilir ( d), değiştirebilir ( c) vb.

vi"

Benzer şekilde, parantezleri, köşeli parantezleri, XML öğelerini vb. Değiştirebilirsiniz, böylece:

vi(
vi{
vit

basitçe değişiklik / silme veya karşılık gelen do di", ci"vb yerine aiçin i(eğer işaretlemek veya parantez değiştirmek böylece çevredeki unsurları kapsayan irade ve örneğin, içeriği)


5

Bir eklenti yaptım vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Her türden en yakın tırnak çifti için metin nesneleri sağlar ve birden çok satıra yayılan tırnak işaretlerini destekler. Yalnızca iqveya kullanarak aqimleci çevreleyen tek ('), çift (") veya arka (`) tırnakların içeriği üzerinde işlem yapmanıza izin verir, imlecin önünde veya arkasında (tercih sırasına göre) Diğer bir deyişle, tekliflere ulaşmak için ihtiyaç duyulduğunda ileri veya geri atlar.

Örneklere bakarak anlamak daha kolay (imleç ile gösterilir |):

  1. Önce foo '1, |2, 3' bar:; bastıktan sonra diq:foo '|' bar
  2. Önce foo| '1, 2, 3' bar:; bastıktan sonra diq:foo '|' bar
  3. Önce foo '1, 2, 3' |bar:; bastıktan sonra diq:foo '|' bar
  4. Önce foo '1, |2, 3' bar:; bastıktan sonra daq:foo | bar
  5. Önce foo| '1, 2, 3' bar:; bastıktan sonra daq:foo | bar
  6. Önce foo '1, 2, 3' |bar:; bastıktan sonra daq:foo | bar

Yukarıdaki örnekler tek tırnak için verilmiştir, eklenti çift (") ve ters (`) tırnaklar için tam olarak aynı şekilde çalışır.

: Ayrıca başka kullanabilirsiniz ciq, diq, yiq, viq, vb

Daha fazla ayrıntı için lütfen yukarıda bağlantısı verilen github sayfasına bir göz atın.


3

Zaten alıntıların içinden yapabilirsin

di"

İçini sil olarak oku "


6
Komut satırdaki bu tür ilk dizeyi değiştirmeye varsayılan olduğundan, imlecin çift tırnaklı dizge içinde olması gerekmez
Eugene Yarmash

1
Teşekkürler bunu bilmek çok güzel! Her şeyi biraz daha dikkatli okumam gerektiğini göstermeye gider. :)
Sam Peacey

3

Brian'ın cevabına ek olarak , yeni değeri p(yapıştırabilir) ve y( çekebilirsiniz ) , böylece tırnak içindeki değeri başka bir değerle değiştirmek isterseniz, alanı seçmek yi"için kopyalamak istediğiniz seçimi yapabilirsiniz . vi"Değiştirmek istediğinizi ve ardından pdeğeri düzgün bir şekilde değiştirin.


0

Seçilen cevap SADECE ViM için uygundur, ancak vi için DEĞİLDİR. Soru aynı zamanda yanlıştır çünkü yazar imlecin ilk konumunun ne olduğundan bahsetmemişti. İmlecin çift tırnak içinde olduğunu varsayarsak, vi için cevap şöyle olacaktır:

T"ct"

Nerede:

T "-" karakterinden hemen sonra geri git

c - komut değiştir

t "- c komutu için karakterleri silmeyi durdurması gereken son konumu, diğer bir deyişle değiştirilecek aralığı belirtin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.