Birden çok kez yapıştırın


98

Birden çok satırı panonun içeriğiyle değiştirmenin en iyi yolu nedir?

Karşılaştığım sorun, bir satırı çekip başka bir satıra yapıştırdığımda "yank" yerine yeni değiştirdiğim satırla değiştiriliyor. Şimdi, başka bir çizgiyi aynı çizgiyle değiştirmek istersem, geri dönüp tekrar çekmem gerekir.

Bunu yapmanın daha iyi bir yolu olmalı.

Yanıtlar:


110

Bu .vimrc dosyamda var:

xnoremap p pgvy

(not: bu sadece varsayılan kayıt ile çalışacaktır, ancak bu eşleştirmenin hatırlanması kolaydır). Daha ayrıntılı bir versiyon yazmak mümkün olacaktır. Ayrıca, eski davranışı elde etmek için hala P'yi kullanabilirsiniz.


30
Zekice. Yapıştırmak için 'p', orijinal olarak seçileni yeniden seçmek için 'gv'. tekrar kopyalamak için 'y'.
Amjith

@SibbsGambling, muhtemelen Vim 7'den önceki bir sürüm kullanıyor musunuz? Sonra ya Vim'i yükseltin ya da x ( vnoremap) yerine v kullanın . Vim yardım dosyası version7.txtxmap ve smap'in bu sürümde göründüğünü belirtir.
Benoit

1
@Benoit Hmm, 7.4.52'im var ama ne işe yarıyor ne xnoremapde vnoremapçalışıyor
Sibbs Gambling

8
Neden bu varsayılan davranış değil?
Seth

27

"0yankınızın içeriğine sahip olmalıdır. Yazmak biraz daha sıkıcı ama "0pne istersen yapmalısın.

Alternatif olarak, önceden eski satırları seçip değiştirmeyin. Bu satırları bir arama ile bulursanız, n.tekrar tekrar tıklayın (bir baş pharfinden sonra), sonra hepsi yapıştırıldığında, nddardından n.gerektiği kadar s ile devam edin.

Vim'e geçerken yapmam gereken en büyük zihinsel değişim, grup düzenlemelerini sırayla nasıl uygulayacağımı bulmaktı. Yani, bir satırda bir dizi düzenleme yapmak ve sonra başka bir satırda aynı düzenlemelerden oluşan bir grup yapmak yerine, ilk düzenlemeyi bir dizi satırda ( .harika bir etki kullanarak ), sonra ikinci düzenlemeyi bir grup üzerinde yapacağım. Satır sayısı, vb. Alternatif olarak, makroların kullanımı harika oldukları için yardımcı olabilir, ancak bazen "karmaşık" değişikliklerle doğru şekilde çalışmak için biraz daha sıkıcı olabilir.


2
:%s/.../.../gc
Onay

@Milimetric +1 böyle onaylayabileceğinizi bilmiyordu.

1
Yükseltme, çünkü makrolar bunu sorunsuz hale getirebilir. Düzenlemeyi bir kez yapın ve 5@m(adlı bir makro için m) gibi bir şey yapabilirsiniz
skatenerd

Harika açıklama için teşekkürler. Şimdi xnoremap p "0p~ / .vimrc
nexayq

14

Sık sık başka bir kayıt kullanıyorum, ihtiyacınız olan satırı adlandırılmış bir kayıt defterine "aykopyalayın ve oradan yapıştırın"ap


11

Vim'de bir seçimin üzerine yapıştırdığınızda, varsayılan kaydı seçimin içeriği ile değiştirecektir. Bir seçimin üzerine yapıştırmak pano kaydının içeriğini siliyorsa, büyük olasılıkla .vimrc dosyanızda aşağıdaki satıra sahip olursunuz.

set clipboard=unnamed

Bir seçenek, bunu kaldırmak ve açık pano kaydını kullanmaktır. "+

Diğer bir seçenek de, açıkça adlandırılmış diğer kayıtlardan (az) herhangi birini kullanmaktır. İlk yapıştırmadan sonra, çizgiyi "cörneğin geri "cpçekin ve ardından oradan yapıştırmak için kullanın .


Aslında varsayılan (burada, Ubuntu'da) clipboard = autoselect; yine de şimdiye kadarki en zarif cevap için teşekkürler.
Tobu

7

satırları ne kadar zaman yapıştırmak istediğinizi npnerede kullanın n, örneğin 3p3 satır yapıştıracaktır.


10
Aynı satırı bitişik olmayan satırlara yapıştırmak istediğinizde çalışmaz.
Tobu

@Tobu, ancak bu sorunun başlığını 'birden çok kez nasıl yapıştırırsınız'
yanıtını veriyor

7

Kopyala / yapıştır kullanmak yerine ciw, içteki kelimeyi değiştirmek gibi bir metin nesnesi komutu kullanmak genellikle daha iyidir . Bu yöntem, .tekrar komutu kullanılarak kolayca tekrarlanabilir olma avantajına sahiptir .

  1. yiw İç kelimeyi kopyala (imlecin altındaki kelimeyi kopyala, "ilk" deyin).
  2. ... İmleci başka bir kelimeye taşıyın ("ikinci" deyin).
  3. ciw<C-r>0 "İkinci" yi "birinci" ile değiştirerek değiştirin (Ctrl-R'dir).
  4. ... İmleci başka bir kelimeye taşıyın ("üçüncü" deyin).
  5. . "Üçüncü" kelimesini "ilk" ile değiştirerek değiştirin.

1
ciw<C-r>0benim durumumda çalışmıyor. işe yaramaz hale ciwgelen ekleme modunda değişiklikler <C-r>. Bunun kolay bir açıklaması var mı? Bunun metin düzenleyiciyle bir ilgisi olabilir mi (RStudio'da pur VIM kullanmıyorum ama VIM Klavye bağlamaları kullanıyorum)
Bushroot

@Bushroot <C-r>, ekleme modundan çıkmadan bir kayıttan yapıştırma yönteminiz olduğu için ekleme modunda kullanılmak üzere tasarlanmıştır - Vim'de , yani; RStudio'ya aşina değilim ama haklı olduğunuzu tahmin ediyorum ve bu özel anahtar bağlamayı uygulamadılar.
böcek

@Sean H: Evet. Anahtar bağlamayı uygulamadılar. VIM'de ve hatta diğer programlarda (örn. Visual Studio Code) VIM bağlamalarıyla sorunsuz çalışır.
Bushroot
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.