Yatay kaydırma nasıl devre dışı bırakılır?


37

Tamponda bazı gizli karakterler var ve yatay kaydırma hizalamayı büyük ölçüde öldürüyor.

Bunu nasıl etkisizleştirmenin bir yolu var mı? İlgili seçenek bulamadım.

Kötü yatay kaydırma demosu

Düzenleme: Demo eklendi. Kaydırma ofsetini dosyanın gizlenmemiş kısmına yerleştiren vim tabanlarını görebilirsiniz, bu nedenle hizalama bozulur.


6
Bunu devre dışı bırakamazsınız, ancak yapabilirsiniz:set wrap
EvergreenTree

8
@Enuy, demek istediğim çizgiler aslında pencere genişliğinden daha uzun , ancak bazı metinler (bash renk kodları) gizlenmiş durumda. Yani, Vim zaten pencerenin kenarına ulaştığını düşünüyor, ama görsel olarak görmedi. Bunun bir hata olduğunu söyleyebilirim.
tommcdo

8
@tommcdo Evet, ne demek istediğinizi anlıyorum. Satır sonundaki gizli kısımlar sarmanın nedeni olduğunda ve Bram'den WONTFIX aldığında satırları sarmala ilgili benzer bir sorun var: code.google.com/p/vim/issues/detail?id=260
Enuy

3
Bu yüzden alternatif bir çözüm arıyorum - yatay kaydırmayı tamamen devre dışı bırakmak için.
Enuy,

3
Aklıma gelen en yakın şey, eğer bir terminalde iseniz <c-s>, ekranın güncellenmemesi için terminali askıya almak için kullanabilirsiniz . Daha sonra kör bir şekilde değişiklik yapabilir ve satırın başına dönebilir ve devam etmek için vurabilirsiniz <c-q>. Belki de yardımcı olmayan seçenekler: aynı sayıda gizli karakterin görünür karakterlerin arasında olmasını veya pencereyi genişletmesini sağlayın.
Matt Boehm

Yanıtlar:


2

Yatay kaydırma nasıl devre dışı bırakılır

Yatay kaydırmayı devre dışı bırakan bir çözüm yazdım ( @ ЯрославРахматуллин'ın önerisini dikkate alarak ), ancak beğeneceğinizi sanmıyorum:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

Bu, sadece tekrar geriye kaydırma inanılmaz hassas yöntemiyle sağa kaydırmayı önler. *

* Ne kadar sağa kaydırdığınızı veya satırlarınızın ne kadar sürdüğünü bilmediğimden, rasgele 99 yarım ekran genişliğinde "uzak" miktarını kaydırıyorum. Ayrıca, "geriye" sola kaydırmadan önce gerçekten sağa kaydırıp kaydırmadığınızı kontrol etmekte rahatsız olmadığımı da unutmayın. Bu çözümü gerçekten kullanmak istiyorsanız getcurpos(), 'sidescroll've değerlerini karşılaştırarak bir şeyi yok etmek isteyebilirsiniz 'columns'.

Neden bunu yapmak istemeyeceksin

Bunu kullanmamanızın nedeni, kaydırma probleminin altında yatan bir başka konudur: Vim, imleci "ekran dışına" taşımanıza izin vermez. Bu nedenle, imleç kaydırma sonrasında ekranın dışına çıkacak şekilde sola kaydırırsanız, Vim imleci yan yana getirir ve sola doğru hareket ettirir.

Ancak, imlecin ekranda görünüp görünmediğine ilişkin hesaplama, orijinal sorunu kaydırıp kaydırmamaya karar vermek için kullandığı hesaplama ile aynı olduğundan, net etki, bu "çözümün" yerinde olması durumunda imleç normal olarak yana kaydırmaya neden olacak bir durumda sağa, şimdi imleç hareket etmeyi reddediyor. **

** Geçerli konuma ve harekete bağlı olarak, biraz daha kesin olmak için imleç sağa doğru hareket edebilir; sadece kaydırma işleminin normal olarak gerçekleşeceği konumdan geçmeyecektir.

Diğer seçenekler?

Bu yüzden, planladığın geçici çözümü ortadan kaldırmayacağından korkuyorum. Genel soruna uygulanabilir bir çözüm istiyorsanız , Vim kaynak kodunda uygulanması gerekecektir.

Gibi zaten not ettik Ben senin gif gösterilen konunun belirli örneğine bir çözüm için en iyi bahis kullanarak durdurmak için eklenti yazarı dilekçe etmektir korkuyorum bu yüzden, bu, yakın zamanda gelmesi olası değildir concealtamamen yerine Gizli metni tampondan tamamen kaldır.

Unconcealed çıktı ve denince dayanarak vim-plugin-AnsiEsciçinde belgelerinde bu olabilir bir şey onları uygulamak mümkün olduğunu, ancak bunun nasıl eklenti fonksiyonlarının bilgisi olmadan kesin söylemek zor.


0

Dosyayı düzenlemenin bir yolu varsa, renkleri ayarlamayı burada açıklandığı şekilde \[ve ile sarmak isteyebilirsiniz :\]

[...] Yapılan şey, sarı renkli başlayan '[' ve ']' deki '' 033 [1; 33m '' yi kabuğa "bu köşeli parantezler de dahil olmak üzere bu kaçık köşeli ayraçlar arasındaki her şeyi" baskısız bir karakterdir [...]

Aksi takdirde, tüm renk kodları karakter olarak kabul edilir ve bu nedenle yatay kaydırma için dikkate alınabilir.

Sorunun bu olduğundan emin değilim, ancak takvimin kaynağını (birlikte syntax off) ve şu anki davranışı görünce , bunu düşündürdü.


Sorun renkler değil, concealözellik tarafından gizlenen karakterlerdir (yorumlardaki tartışmaya bakınız).
Zengin

Evet anladım. Belki de iyi anlamadığım bir şey var, ancak PS1 ile renk karakterlerini (renklerin olması önemli değil) kullanarak benzer bir sorunum vardı ve terminal doğru bir şekilde yeni bir satıra geri dönmüyordu. renklerin karakterlerini etkili karakterler olarak sayarken, görünmez oldukları için göz ardı edilmeleri gerekirdi. Animasyon bana bu konuyu hatırlattı (yatay sayfalama "çok yakında" yapıldı, sanki satırdaki karakter sayısına göre, cevabımdaki linkte belirtildiği gibi).
padawin

İki sorun benzer, katılıyorum. Ancak bu soruda açıklanan davranış, Vim'in karakterleri sayma biçimi (terminal değil) nedeniyle oluşur ve bu nedenle ilk paragrafınızda yaptığınız öneri burada yardımcı olmayacaktır, korkarım.
Zengin

0

EDIT: Bu bilinen bir hata, "düzeltilmeyecek" kapalı: https://github.com/vim/vim/issues/260

Orijinal cevap:

Vim imleç ekranın kenarına değene kadar yatay olarak kaydırılmıyor.

Kullandığınız sidescrolloff?

Yatay kaydırmayı tamamen devre dışı bırakmayı bilmiyorum, ancak bu ayar imleç kenardan ayrılıncaya kadar bekletmelidir:

:set sidescrolloff=0

Sorun bile var 'sidescrolloff=0'Vim imleç inandığı için gelmiştir kenarına gitmişti: Bu unconcealed metin, değil görünür metin üzerindeki hesaplama dayandırır.
Rich

Oh, bu gerçekten buggy. Bununla ilgili bir hata raporu buldum ve cevabımı ekledim. Vim bakıcısı düzeltmek istemiyor.
JasonWoof

Bu hatayı düzeltmek değil ... ama belki de takvim renklendirmeyi tamponda düz metinle ve renk / etc için prop_type_add () ve prop_add () ile uygulayabilirsiniz.
JasonWoof

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.