İç metnin tırnak metniyle değiştirilmesi


17

Sıklıkla karşılaştığım bir düzenleme deseni şu şekildedir: Bir parça metni tırnak işaretleri veya parantez içine almak ve başka bir tırnak / parantez çifti içindeki metni değiştirmek istiyorum.

Örneğin, sınıf adını kopyalamak foo barve başka bir yere yapıştırmak istiyorsanız :

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

Bildiğim şu: yi"Kaptanın sınıfına girersem, metni tırnak içine almak için kullanırım.

Şimdi bunu kaydımda var, bu yüzden div'ın sınıf içeriğini onunla değiştirebilmeliyim. Ama bunu yapmanın kullanışlı bir yolunu bulamıyorum.

Eğer bunu kullanırsam, ciwkayıtlarimin içeriğini değiştirmek için üzerine yazmam gerekir, bu yüzden çektiğim metni kaybederim.

Gelebileceğim en iyi şey div'ın sınıfının ilk alıntısına geçmek, vurmak p, sonra bir sonraki alıntıya silmek dt".

Genellikle pozisyonumu berbat ediyorum ve iki dizeyi birleştiren tırnak içine bir yere yapıştırıyorum ve işleri karıştırıyor.

Bunu kolaylaştırmak için "iç metni çektiğim içerikle değiştir lütfen" kombinasyonu yapmanın bir yolu olduğunu umuyorum.

Yanıtlar:


19

vi"pİçerideyken kullanabilirsiniz "". Bu, yank kaydındaki metni değiştirebilir, bu nedenle orijinal askılı metni bir kereden fazla kullanmak istediğinizde önemlidir.

EDIT : Octaviour yorum birden fazla tekrar kullanılabilir hale getirmek için yorum ek bilgi:

Bunu yapmak için iki komutu yapan adlandırılmış bir yazmacıya çekilirdim: "ayi"ve vi""apeğer kayıt kullanırsanız a.


2
Bu çözüm üzerinde duracağım. Önce kopyalamak istediğiniz metni çekersiniz. Sonra yapıştırmak istediğiniz yere gidin, vi "kullanarak görsel olarak seçin. Yapıştır komutu şimdi aynı anda adlandırılmamış kaydın içeriğini imlece koyar ve seçilen metni siler. Bu nedenle vi" p tam olarak istediğinizi yapar, ancak aynı metni iki kez yapıştırmanıza izin vermeden adsız kayıt içeriğinin yerini alır. Bunu yapmak için iki komutu yapan adlandırılmış bir yazmacıya çekilirdim: "ayi" ve vi "" ap kayıtlarını kullanırsanız.
Octaviour

Ayrıntılarınız için teşekkürler. Vim hareketleriyle şeyleri hecelemeye yardımcı olur, daha sonra hatırlamayı kolaylaştırır. Hala umduğum kadar kolay değil, ama bir vim şekilde mantıklı. Tekrar tekrar ve hızlı bir şekilde ikinci kez değiştirmek için dot komutunu kullanmak olsa da işe yaramıyor. Bunun bir kısayol olmasını umuyordum. :)
jurgenb

11

Numaralandırılmış kaydı kullanabilirsiniz. İlk yank "foo-bar" ile kaydı yi"dolduracak "0, bkz :h "0. Sonra ci"<c-r>00'ın kaydı ile değiştirin.

:h i_CTRL-RSon bölümün açıklaması için bakınız .


2
Neden sadece isimsiz kayıtta ( yi") sormak ve 0change ( ci"<c-r>0) metnini sildikten sonra saklandığı kayıttan yapıştırmak değil ? Vimgolf açısından 2 tuş vuruşu kazanırsınız ve kayıtlarınızla uğraşmazsınız.
statox

En kısa sürede 'a' diyorum düzenleme moduna
girerim

@ n3wjack Muhtemelen daha CTRL+rönce baskı yapmadığınız için abu <c-r>demektir.
statox

1
@ KarlYngveLervåg ciwSilinen metni aslında adlandırılmamış kayıt defterine koyar, ancak kayıtlar kaydırılır, bu yüzden <c-r>0bunun yerine kullanmak zorundasınız <c-r>". Bkz :h quote_number.
statox

1
Daha özel olarak, buradaki noktanın isimsiz kayıt hakkında değil, numaralandırılmış kayıt hakkında olduğunu düşünüyorum. "0Kayıt sadece yank komutuyla doldurulur ve örneğin rahatsız edilmeyecektir c.
Karl Yngve Lervåg

9

İşte başka bir çözüm. Vimgolf açısından en iyisi değil, ancak kara delik kaydını kullanıyor:

foo barDizgeye girdikten sonra normal olarak kullanarak sıralayabilirsiniz yi".

Sonra değiştirmek için parantez içinde: "_di"P

Hangisi:

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

Kara delik kaydının avantajı, diğer kayıtlarınızı bozmayacak olmasıdır. Daha :h quote_fazla bilgi için bakınız.

(Bu cevabın sadece karartma kaydı hakkında konuşmak için burada olduğunu unutmayın. Kişisel olarak @grodzik tarafından önerilen görsel seçimi kullanıyorum.)


Bunun için büyük bir davaya ihtiyacınız olduğunu düşünüyorum P. Ne zaman di"imleci son tırnak bırakılacaktır ve psonra yapıştırın olacak, nereye kadar Pgeçerli konumdan önceki yapıştırın.
jecxjo

@jecxjo Doğru, cevabımı düzenledim, teşekkürler!
statox

8

Bu kadar sık ​​ihtiyacım var, basitleştirmek ve maksimum hıza izin vermek için bir eklenti yazdım: ReplaceWithRegister .

Bu eklenti, bir gr{motion} / metin nesnesi, tüm satır (lar) veya geçerli seçim tarafından kapsanan metni bir kayıt içeriğiyle değiştiren ikisi bir arada komut sunar ; eski metin kara delik kaydına silinir, yani gitti. Birçok köşe kasasını şeffaf bir şekilde işler ve standart .komutla hızlı bir şekilde tekrar edilmesini sağlar . Eğer beğenmezseniz, sayfasının alternatiflere bağlantıları vardır.


Harika! Bu vanilya vim olmalı.
Philipp Moers
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.