Ekleme moduna girmeden birden fazla karakter nasıl değiştirilir


12

Ben böyle bir çizgi ile bir dosya var:

foofoo.xy.barbar

Değişmek istiyorum xyTo gh. Yapmaya çalıştım 2r-> gh, ama açıkçası bu işe yaramadı, yerine xyile ggve sonra imleci bir nokta sola taşıdı.

Ekleme moduna girmeden veya daha fazla tuş vuruşu kullanmadan bunu yapmanın bir yolu var mı (örn. :s/xy/gh/)?


2
RDeğiştirme Moduna girer. :help replace-modedaha fazla bilgi için.
alxndr

Denedim vt.rgh. Ancak sonuç, imleç konumu dışında sizinkiyle aynıydı.
Gonçalo Ribeiro

2
Neden ekleme moduna girmek istemiyorsunuz? Gibi bir şey cwgh<esc>iyi çalışır.
Doorknob

1
@ durron597 Emin eğer değilim minimize-keystrokesiyi etiketi, bu soru gerçekten ne genellikle değil yaklaşık gibi. (Önerilen düzenlemelerinizi reddettim) ... Belki de meta'da tartışmalısınız?
Martin Tournoij

Yanıtlar:


19

Yeni metin eski metinle aynı uzunlukta ise, Vim'in değiştirme modu bir seçenektir. Normal moddan, R(bu büyük bir "r") sizi değiştirme moduna getirir. Bu, diğer bazı metin editörlerinde "üzerine yaz" işlevine benzer: ekleme modunda olduğu gibi yeni karakterler eklemek yerine, yazmak imlecin altındaki karakterin yerini alacak ve bir sonraki imlece ilerleyecektir. (Küçük harf gibi düşünün r, ancak aynı anda yalnızca tek bir karakterden fazlasını kullanın.) Değiştirme modu ile ilgili belgeleri bulun :help replace-mode.

Senin durumunda: arasındaki imleç .ve x, basarak modu yerine almak R. Şimdi yazdığınızda g"x" yerine geçer ve bir sonraki karaktere geçer, böylece h"y" yerine yazabilirsiniz . Düzenleme şimdi yapıldı, böylece Escapenormal moda geri dönün.

(Bu, değiştirme metniniz eski metinle aynı uzunlukta olduğunda çalışır, ancak değiştirme metniniz daha uzun veya daha kısasa, cihtiyacınız olan her şey olabilir: bir hareketin içindeki 1 metni, daha sonra yazdığınız metinle değiştirir . birçok yol kullanımını yapmak carasındaki imleç: örneğin, .ve x, ct.ABCEscapediyor c hange metin (yukarı ' t il sonraki .) 'ABC' ile).


1 Hareketteki metni adlandırılmamış / "kaydediciye çeker ve daha sonra ekleme moduna geçer, böylece değiştirmek için bir şeyler yazabilir ve sonra Escapenormal moda geri dönebilirsiniz.


2
Bu durum için geçerlidir. Ya bu 2 karakteri 3 karakterle değiştirmek istersen?
Gonçalo Ribeiro

1
İyi soru; farklı uzunluktaki metinleri işlemek için bir yol içerecek şekilde değiştirilmiştir.
alxndr

Evet, bu şekilde biliyorum. Ancak bu şekilde Ekle moduna girersiniz ve bu durumda Ekle modunu kullanmamanın bir yolu olup olmadığını merak ettim. Çok yararlı olduğunu düşünmüyorum (ve yine de yanlış olabilirim).
Gonçalo Ribeiro

1
Hedef karakterin -th oluşumuna nkadar değiştirmek için bir sayı ile önek n. Bu format ile etiket parçalarını değiştirmek için yararlıdır w_x_y_zve a-b-c-d. Kullanım fyerine tsıra sınırlayıcı karakteri silmek için.
pkfm

5

Bunu yapmanın birkaç yolu vardır, ancak aklıma gelen en basit şey:

TL; DR

fxcw<REPLACEMENT TEXT>

açıklama

  • fxseni x'e atlar (bkz. help *f*)
  • cwsözcüğü değiştirmek (bkz diyor :h *c*, :help *w*ve :help cw"xy" metnini kaldırarak ve sen orada ne istersen koymak icar, mod eklemek girme, daha fazla bilgi için).
  • <DEĞİŞTİRME METİNİ> örneğinizde - "gh" ile değiştirmek istediğiniz şeydir.

Bu yaklaşımın bir avantajı, çok sık kullanılan metin düzenleme ve gezinme komutlarını kullanmasıdır. Bir diğeri, "xy" nin herhangi bir uzunlukta olabileceği ve bu hala işe yarayacağıdır.

cwEserler metin nesnesi dönemleri (çevrilidir çünkü .sözcüğe bir sınır olarak hareket).

İmleciniz zaten "y" karakteri (veya değiştirilecek metindeki herhangi bir karakter) üzerindeyse, kullanabilirsiniz ciw<REPLACEMENT TEXT>. Bu, vim'e, başında olmasanız bile içinde olduğunuz kelimeyi değiştirmesini söyler. Hakkında :help text-objectsdaha fazla bilgi ciwve genel olarak metin nesneleri için bkz .


bu onu ekleme moduna sokmayacak mı?
elyashiv

1
Ah - sorusunun bu kısmını yakalamadı. Bu durumda, evet - R en uygun çözümdür.
Cody Poll

3

Değiştirme modu:

Rgh<Esc>

değiştirme orijinalle aynı uzunlukta ise en belirgin çözümdür, ancak şunları da yapabilirsiniz:

2sgh<Esc>

veya:

cegh<Esc>
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.