Geçerli yapıştırma arabelleğini kullanarak 'değişiklik sözcüğü' nasıl yapabilirim


86

Yapıştırma arabamda bir miktar metin var, örneğin bir yw(yank kelimesi) yaptım ve şimdi arabamda 'foo' var.

Şimdi 'bar' kelimesine gidiyorum ve onu yapıştırma tamponumla değiştirmek istiyorum.

Metni manuel olarak değiştirmek için yapabilirdim cwve sonra yeni kelimeyi yazın.

'Değişiklik kelimesini' nasıl yapabilirim ama yerine yeni kelimeyi yazmak yerine yapıştırma arabelleğimin içeriğini kullanabilir miyim?

Şu an sahip olduğum en iyi seçenek, değiştirmek ve yapmak istediğim kelimenin başına gitmektir dw(sözcüğü sil), sonra diğer yere gidin ve yw(yank kelimesini) yapın, sonra yerine geri dönün ve p(Yapıştırma) özellikle aynı ekranda olmadıklarında sakar.

Yanıtlar:


120

seçenek 1

Bunu yapmak için kayıtları kullanabilir ve işlem için bir anahtarlama yapabilirsiniz.

İle değiştirmek istediğiniz kelimeyi yazın yw.

Sızan kelime, 0yayınlayarak görebileceğiniz kayıt defterindedir :registers.

Değiştirmek ve yapmak istediğiniz kelimeye gidin cw. Kaydı yapıştırmak için Ctrl+ rtuşunu 0kullanın 0.

Bunun için harita bunun gibi bir şeye benzeyebilirdi ( anahtar kombo olarak Ctrl+ varsayılırsa j)

:map <C-j> cw<C-r>0<ESC>

Seçenek 2 (daha basit)

Sözcüğünüz yanarken, imleci değiştirmek ve yapmak istediğiniz kelimenin üzerine getirin viwp. Görsel olan iç kelimeyi seçin ve yapıştırın.

Yorumlarda tlo Nezaket: sadece yapabilirdi vep. Bir karakter daha kısa. Dezavantajı imleci kelimenin başında konumlandırmak zorundadır ve (benimki gibi) tamponu değiştirir.

Yorum (Michael'dan):

Bu iyi. Ekstra not: ikinci yöntem gerçekten daha kolaydır, ancak olduğu gibi, yalnızca BİR değiştirme için işe yarar, çünkü her bir değiştirme işleminden sonra tampon, değiştirilen alana değiştirilir (eski metin). İlk yöntem biraz kullanmak zor, ancak arabellek 0'ın 'olduğu gibi' kalma avantajı vardır, bu yüzden aynı metni 1'den fazla değiştirme yapmak için bu yöntemi kullanabilirsiniz.


14
Seçenek 3 (daha da basit): Kelimeniz yanarken, imleci değiştirmek ve yapmak istediğiniz kelimenin ilk karakterinin üzerine getirin vep.
tlo

Değiştirilecek yalnızca 1 kelime olduğunda Seçenek 3'ü severim. Eğer aynı kelimeden daha fazla değişecek sözcük varsa, Seçenek 1, kullanmamı sağlar. operatörü tekrarlamak için ..
typelogic 20:18

3
ve"0pdeğişikliğini tekrarlamana izin veririm
JKillian

Eğer bir şeyle eşleştirecekseniz, kullanımı muhtemelen daha iyidir: map <C-j> ciw<C-r>0<ESC>böylece bastığınız kelimenin neresinde olduğu önemli değildir ^j.
Paul Parker,

CTRL-R'nin neden sihir yaptığını bilmek isteyen herkes: :help insertsonra CTRL-R'yi arayın /CTRL-R. Nasıl ve"0pçalıştığını görmek için bakın:help registers
Paul Parker

12

ywSözcüğünüzü işaretlemek için imleci değiştirmek ve "_dwsilmek için kullanmak istediğiniz imleci hareket ettirin, ardından metni boş kayıt defterine gönderin (bu nedenle, "yazılanların / kesilen metnin varsayılan olarak gittiği kayıt listesinin içeriğinin üzerine yazmaz) ), ve sonra sadece ile yapıştırın p.

İşleri biraz kolaylaştırmak için aşağıdaki eşlemeyi kullanabilirsiniz:

nnoremap <leader>d "_d

... normal modda, \dwbir sözcüğü silmek için "kayıt defterini etkilemeden kullanabilirsiniz .


3

Bu VIM yolunu yapmak için kasıtlı olarak yank, delete ve diğer kayıtları kullanırsınız.

Kayıt "0yank kaydıdır. İstediğiniz her şey buraya konur, ancak siler asla sicile dokunmaz "0.

Demek ki, örneğinizde, sadece bir kelime söylemiştiniz. Bir kelimeyi az önce çektiğiniz kelimeyle değiştirmek için, asla yank kaydına dokunmayan silme işlemlerinden yararlanabilirsiniz. Bu nedenle, hedef kelimeye gidin, silin dw, sonra yank-register'inizden yapıştırın "0pveya daha iyisi, cwo zaman ^R0(tekrarlanabilir).

Yank yazmacının tam tersi, küçük silme yazmacıdır "-. Herhangi bir küçük silme veya değiştirme silme işlemi buraya koyulur, ancak yanlar asla dokunmaz "-. Silme, tam bir çizgiden azsa küçük sayılır.

Kayıtlar "1- "9silme geçmişi kayıtlarıdır. En "1son büyük silme veya değişiklik kaldırmayı "9içeren ve en eski büyük silme veya değişiklik kaldırmayı içeren ile. Yalnızca küçük olmayan, yani bir veya daha fazla satırın silinmesiyle silinir "1- "9.

Bir sicil değiştiren herhangi bir işlem için, bir kopya da daima varsayılan, adsız sicile yerleştirilir "". Bu, açıkça bir sicile isim vermediğinizde kullanılan sicildir.

Kayıt "_, kara delik kayıttır ve her zaman boştur. Eğer silerseniz, hiçbir kayıtta hiçbir şey değiştirilmez, varsayılan ""kayıt bile değil , kara delik kayıt bile olsa . Kaldırılan metin geri alma geçmişinizden ayrı olarak tamamen bitti. Kara delik kayıt defterine yanmak veya yapıştırmak aslında hiçbir şey yapmaz.

Kara delik kayıt , küçük silme kayıtlarınızı değiştirmeden "_önce bir küçük silme, ardından birkaç silme gibi işlemleri yapmanıza izin verir , ardından ilk küçük silme işleminizi yapıştırın."_"-

Diğer kayıtlar son eklenen kayıt "., dosya adı "%ve "#komut kaydı ":, arama kaydı "/ve ifade kaydıdır "=.

Tüm bu kayıtların ve içeriklerinin bir listesini komut ile alabilirsiniz :register. Bu komut neyin neyle sonuçlanacağını denemek ve öğrenmek için çok kullanışlıdır.


2

Buna çok sık ihtiyacım var, basitleştirmek ve maksimum hızı sağlamak için bir eklenti yazdım: ReplaceWithRegister .

Bu eklenti, bir gr{motion} / text nesnesi, satırların tamamı veya geçerli seçim tarafından kapsanan metnin yerine geçen bir kayıt defteri içeriğiyle birlikte bire bir komut sunar ; eski metin karadelik kaydına silinir, yani gitti. Birçok köşe kılıfını şeffaf bir şekilde işler ve standart .komutla hızlı bir şekilde tekrarlanmasına olanak sağlar . Hoşunuza gitmezse, sayfasının alternatiflerle bağlantısı vardır.


2

Yapıştırmayı tekrarlamak için change komutunu kullanın.

cw ^R0ESC (^ R = Control + R; 0 0 kaydı için)

kelimeyi reg'deki içerikle değiştirecektir. 0 ile tekrarlayalım..

Bu, cgnarama şablonlarını değiştirmek için (VIM 7.4) için harikadır :

  • /Veya ile ilk arama*
  • cgn ^R0ESC
  • .sonraki maçta tekrarlamak veya natlamak için

1

Henüz eklenmemiş olduğundan, genellikle dizeleri değiştirirsiniz :%s/.../.../ve bunu imlecinizin altındaki sözcükle de yapabilirsiniz.

  1. Komutun ilk bölümünü, aradığınızı girin: :s/find/
  2. Daha sonra tıklayın <ctrl-r>ve imleç ile değiştirmek istediğiniz kelimeyi seçin.
  3. Sonra imlecin altındaki kelimeyi komut satırına yapıştırmak için <ctrl-w>(küçük "word") veya <ctrl-a>(büyük "word) tıklayın.
  4. Sonra komutu bitir.

İmleç öğelerinin komut satırında nasıl kullanılacağı ile ilgili bağlantıya bakın .


1

Genellikle bu kullanın: ywyank foosonra silmek barile dwve koyun nihai adım olarak fookasadan 0kullanarak metin çekti tutar "0p. Gerektiği .gibi period ( ) ile koyarak tekrarlayın .

Ayrıca, ywve yerine, dwkullanabilirsiniz yiwve diw(fazladan dikkat edin i- içeride demektir ). Bununla, yalnızca kelimenin başlangıcında değil, içindeki herhangi bir konumdan kelimeyi silebilir veya silebilirsiniz .


0

Bu eklentiyi seçim bölgesini genişletmek için kullanıyorum: https://github.com/terryma/vim-expand-region

Yani bir kelimeyi değiştirmek için benim kombinasyon olacak: vvpbir kelimenin herhangi bir yerinde.

Ayrıca, yapıştırdıktan sonra adsız kayıt içeriklerini kaydetmek için bir hack'im var, böylece tekrar edebilirim.

vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>

(panom otomatik olarak seçildi)


0

Geçerli kelimeyi kopyalanan kelimeyle değiştirmek için aşağıdaki anahtar eşlemesini kullanıyorum.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

yiwbir kelimeyi kopyala. Bir kelimeye gidin. ,rrsözcüğü değiştirin.
Lider anahtarı haritadır ,.


,rwdaha mantıklı olurdu ve QWERTY'de muhtemelen kemeri çıkarmak daha kolay ve daha hızlı. DVORAK'da, hiç mantıklı gelmese ,rcde hepsinden daha kolay ve daha hızlı olduğunu seçtim . DVORAK'da, ,rwbir korku şovu;)
Paul Parker

0

İlk önce, yanklamak istediğiniz kelimenin başlangıcına gidin. Eğer kelimenin tam ortasındaysanız, sadece bbaşlangıcına geri dönün. Ardından ye, tüm boşluğu boşluk bırakmadan tüm kelimeyi yayırmak için yapın e. Belki yaparak - Son olarak, değiştirmek istediğiniz kelimeyi gidip wbirkaç kez - ve bir yapmak vepgirmek için v, isual seçim modunu seçmek ekelimenin nd ve pson çekti içeriğini Aste'deki.

(Biri neden kabul edilen cevap hakkında basitçe yorum yapmadığımı bilmek isterse, kullanmak yeyerine küçük bir değişiklik yapılması ywnedeniyle, bu yığındaki itibarım hala çok düşüktür.)


0
  1. ywdünyayı dolaşmak için kullanın , değiştirmek istediğiniz dünyaya gidin.
  2. kullanmak vdünyayı seçmek için, veveya vwdurumunuza bağlı.
  3. girmek pdünyaya paster seçilen blok yerine kopyalanan için

0

Diğer daha iyi cevaplara ekleyerek. Biraz açık ama silmeden önce kolayca yapıştırabilirsiniz. 'yw' sonra değiştirmek istediğiniz kelimeye gidin, 'pldw' (yapıştırın, bir karakteri sağa hareket ettirin, kelimeyi silin.

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.