Vim seçimlerini metin olarak yapıştırmayı durdurun!


10

VI ve VIM'i yıllardır (30 veya daha fazla) kullanıyorum (xterms'de, kendi penceresi değil, gvim) ve fare orta düğmesini bir seçim olarak kullanarak vim verdiğim büyük bir vim komutları kütüphanesine sahibim.

Mesela sık sık ...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

Seçim, test, biçimlendirme, satırları hareket ettirme vb. Gibi şeyleri yapmak için birçok VIM komutu içerir ve genellikle seçimin sonunda w ve: sonraki VIM komutlarını, böylece vim bir sonraki dosyaya tekrar yapıştırmam için hazır. Bu, özel komut dosyalarına (perl yerinde düzenleme gibi) gerek kalmadan çok sayıda dosyayı ÇOK karmaşık yollarla güncellememe izin veriyor.

Bu vim komut pastalarından bazıları 200+ satır uzunluğundadır (ekranda açtığım metin dosyalarında saklanır ve 'tümünü kopyala'! Bunlar, yeniden biçimlendirdiğim binlerce dosya kümesinde çok değişiklik yapar. sadece belirli dosya kümeleri için değil, günlük vim çalışmalarım için değil EG: Metin / veri dosyaları için toplu yeniden biçimlendirme.

Sorun...

Son sistem düzeltme ekim (Fedora 25) sırasında vim, fare seçimini vim komutları olarak değil, METİN OLARAK olarak yapıştırıyor ve durduramıyorum!

Hala başka bir sistemde iyi çalışıyor (Fedora 24).

Metin olarak yapıştırmak istiyorsam, yapıştırmadan önce ekleme moduna giriyorum! Ekleme modunda olmadığında VIM'in seçimleri metin olarak otomatik olarak yapıştırmasını istemiyorum. Bunun bir güvenlik özelliği olduğunu anlıyorum, ama benim için önemli bir kullanılabilirlik sorunu.

Bu (özellikle "kmous" terminfo giriş) yapmaz bir makineden terminfo girişleri (xterm-256color) kalma geri denedim. Ayrıca vim ": set mouse =" ayarına (ki bu null!) Baktım. Ben xterm (şüpheli), ya da VIM (muhtemelen) değişti bir şey olup olmadığını bilmiyorum ve değişiklik günlükleri ve google yararsız olmuştur.

Ancak hiçbir şey bana eski davranışı göstermiyor.


Aynı sorunu, daha az ayrıntıyı, çözümü olmayan başka bir kullanıcı buldum unix.stackexchange.com/questions/346293/…
anthony

1
Daha olası bir vimdeğişiklik olduğundan şüphe ediyorum : vimBir xtermşeyin içinde klavyeden girilebilir veya fare düğmesiyle nasıl yapıştırılabilir? Böyle bir mekanizma bilmiyorum. Öte yandan, yapıştırma ve <esc> ile çevrelemeye karar verebilmesi için çalıştığını xtermbilir . (A) Farklı türde bir terminal penceresiyle ve (b) farklı adda bir kopyasını deneyin . Bu, sorunun nedenini daraltmaya yardımcı olmalıdır. vimivim
Philippos

@Philippos'a katılıyorum. Belki vimyapıştırma yönteminizi ele geçirmekten başka bir şey olabilir . Belki de makinenize ssh'ing veya telnet yapmayı deneyin ve bu şekilde yapıştırın. Bir Windows kutunuz varsa, Fedora25 makinenize ssh için macun kullanın ve bu şekilde yapıştırın.
Jim U

Doğrudan ilgili değil, ama pencerelerde gvim yıllardır bu şekilde davrandı. Gvim'i yüklediğinizde, iki yürütülebilir dosya gvim.exe(graphical-vim) ve komut satırı alırsınız vim.exe. "İtext" yapıştırın gvim.exe ve olsun itext. Vim.exe yapıştırın ve almaktext
Jim U

1
@Philippos Bu mekanizma parantezli macun olabilir . Vim'in bunu nasıl destekleyebileceğini bilmiyorum, belki de pastetoggleseçenek?
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


12

Peki bir sürü web sayfası geçtikten sonra, birçok işe yaramadı gibi bazı ipuçları veren, bana neden ve sorunun çözüm yol açan bir ipucu (bir macun etrafında ekstra metin) buldum.

Görünüşe göre vim, belirli terminalleri tanıdığında kullandığı bir dizi 'sahte' termcap girişi oluşturdu (ve bu durumda yanlış olmasa da bazen yanlış oluyor).

Vim'deki termcap ayarları sayısal eklentidir, çünkü normal bir ": tümünü ayarla" ayar listesinde GÖSTERMEZ. Bunları görmek için ": set termcap" kullanmanız gerekir. Spesifik 'standart olmayan' termcap ayarı "t_BE" dir (bakınız vim ": yardım t_BE"). Yerleşik yardım "xterm-bracketed-paste" bu dahili-vim termcap ayarını açıklar.

Temel olarak bu ayar tanımlanmışsa (bu durumda Vim termcap / terminfo tarafından değil), vim başladığında xterm'e gönderir, bu da xterm'e kullanıcının harici bir kaynaktan yapıştırdığı herhangi bir metnin etrafına özel kodlar eklemesini söyler. Vim bunları gördüğünde otomatik olarak yalnızca ekleme moduna geçmez, aynı zamanda metni biçimlendirmemek için 'yapıştırma modunu' ayarlar.

Daha sonra (yapıştırma modu) ÇOK yararlı olduğunu düşünüyorum! İlki bana tüm sıkıntıyı veren şeydi.

Kaba kuvvet çözümü, ".vimrc" dosyasına ekleyerek köşeli yapıştırmayı devre dışı bırakır.

:set t_BE=

Alternatif Bir Çözüm ....

Basamalı macunu tamamen devre dışı bırakmak yerine, komut veya normal moddayken terminal macununun (fare'den) başlangıç ​​sırasını gördüğünde vim işlemini durdurun.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

Bunu kullanmak, ekleme modu vim'deyken metin yapıştırırsanız, girintili olması muhtemel olan metni biçimlendirmeye (girintilemeye) çalışmayacağı anlamına gelir.

Bu, artık "showbreak" ve "listchars" öğelerini (sarılmış satırları, sekmeleri, aralıksız boşlukları ve satır sonundaki fazladan boşluklar). Başka bir yere yapıştırmak için fare seçimleri yapmak istediğimde hala vim koymam gerekiyordu.

Çözümler hakkında görüş ve önerilerinizi bekliyoruz.


Bu aynı zamanda Cygwin Vm'de de çalışıyor gibi görünüyor ama maalesef VS Vim'deki sorunu çözmüyor
James Robinson

@JamesRobinson Muhtemelen VS için farklı bir yerleşik terminal
anthony
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.