Vim'de yapıştırılan metni nasıl geri alabilirim?


10

TL; DR; version - Ekleme moduna geçtiğimden beri yazılan diğer metni geri almadan OS kopya arabelleğime yapıştırılan metni nasıl geri alabilirim?

Daha uzun açıklama:

  1. İşletim sistemi kopya arabelleğinize bir şey koyun (örneğin, bazı metinleri vurgulayın ve Command-cMac'te yapın)
  2. Vim'de ekleme moduna geçme ( i)
  3. Bir şeyler yazın (ör. asdf)
  4. Ekleme modundan çıkmadan, kopyalama arabelleğinizden vim'e yapıştırın ( Command-vMac'te)
  5. hit escape
  6. Yapıştırmayı geri almayı deneyin ( u)

En son ekleme moduna geçtiğiniz her şeyi geri alır. Diğer bir deyişle, asdfyapıştırdığım tüm metni ve metni temizler .

Nasıl mı sadece yapıştırılan metin geri? Yapıştırılan metni geri alma seçeneğine sahip olmak için metni yapıştırmadan önce her zaman ekleme modundan çıkmam ve tekrar içeri girmem gerekir mi?

Yanıtlar:


4

Bir yol, yapıştırma işleminden önce açıkça ekleme ve ekleme moduna geçmektir. Yapıştırma komutlarını genişletirseniz, yapıştırmadan önce otomatik olarak bir geri alma noktası da ayarlayabilirsiniz :

" Any text fragment pasted in insert mode should be undone separately, without
" destroying what was typed before.
inoremap <C-R> <C-G>u<C-R>

Yukarıdaki yerleşik i_CTRL-Rkomut içindir. Ben bilmiyorum Command-vMacVim uygulanan, ancak prepending <C-G>uiçin :imapkomutuyla aynı etkiyi elde etmelidir.


1
Bir cazibe gibi çalışır, teşekkürler! Muhtemelen yapıştırma için standart vim yöntemlerine bağlı kalmalıyım.
Javid Jamae

Sadece şunu :h i_CTRL-G_uekleyin : (yani, ekleme modunda "geri alma sırasını kır, yeni değişikliği başlat").
toraritte

2

MacVim'de, Edit > Pastekısayolu geçersiz kılmak için menü öğesinin eşlemesini kaldırmanız gerekir , ardından D-vher modda Cmd-V'yi ( MacVim parlance'de) uygun komuta yeniden eşleyebilirsiniz. Bunu kendime ekledim ~/.gvimrcve şimdi her şey harika çalışıyor:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

Geri <C-g>ualma geçmişini düzeltmek için yalnızca ekleme modunda gereklidir; ve noremapve cnoremapnormal ve komut modlarında varsayılan yapıştırma davranışını geri yüklemek içindir.

Beni doğru yöne yönlendirdiği için Ingo Karkat'a teşekkürler.


1

Aslında çözüm, önce komut moduna (örn. Esc) Gitmeniz ve ekleme moduna tekrar girmeniz gerektiğidir, ancak yalnızca elle yazdığımda çalışır, ancak test edersem "rastgele" çalışmayı durdurur gibi görünüyor ~/.vimrc. Google hiç yardımcı olmuyor.

Bu sorunu çözmeye çalışmak için çok zaman harcıyorum ve sadece durumumun nedenini anlıyorum:

Yapıştır anahtarını mevcut terminal yapıştır anahtarıyla eşlemeyin

mesela Ctrl+Shift+Vbenim Konsole terminalinde yapıştırmak olacak, ama bu anahtarı atarsanız <C-S-v>içinde ~/.vimrc, "yerine birden pastaların sadece tek yapıştırma için geri al" çalışma olmayacaktır.

Benim durumumda kullanmak <C-v>yerine <C-S-v>:

inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right>

Durumunuz farklı olabilir, ancak nokta aynıdır: varolan terminal öykünücü anahtarıyla aynı yapıştırma tuşu çakışmalarını atamayın.

Ben% 100 terminal macun anahtarımı ayarlayarak bu sonucu kanıtladım Ctrl+Vve şimdi <C-v>çalışmayı bırakıp <C-S-v>çalışıyorum.

Ayrıca vimin çok hassas ve garip olduğunu unutmayın. Ben rakam ı kullanmak zorunda dışarı ielle ardından 2 Sağ tuşları ben koymak zorunda araçları var doğru imleç konumunda, çalışır hale getirmek için ive içinde 2 Sağ tuşlarına ~/.vimrcda. Durumunuz farklı olabilir, ancak nokta aynıdır, ~ / .vimrc% 100 tuşlarının + düzeninin elle yazdıklarınızla% 100 eşleştiğinden emin olun.

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.