GNU ekranı altında vim'de CTRL- * sabitleme


10

GNU ekranı altında vim çalıştırırken, CTRL , ok ve Pg * tuşlarıyla yapılan beklendiği gibi çalışmadığını .

Ubuntu 10.10 kullanıyorum vim-gnome paketini kullanıyorum.

Farklı bir makinede, Ubuntu da çalışıyor, bu sorunsuz çalıştı; maalesef şu anda bu yapılandırmayı kullanamıyorum.

Burada ilgili bir soru var: Vim'de Ctrl + okları nasıl düzeltilir?

Bununla birlikte, önerilen çözüm, vim'in tuş bağlantılarını terminal emülatörü ile çalışmak için yeniden takmaktır, bu durumda PuTTY. Hiçbir şey yapmayı hatırlamıyorum ve bu sorunu çözecek bir ekran yapılandırma seçeneği olduğundan şüpheleniyorum.

Ayrıca gnu ekran posta listesinde vim yoluyla çalıştırmanın uygun bir düzeltme veya geçici çözüm olduğunu gösteren bir iş parçacığı da vardır $ TERM=xterm vim. Bu işe yarıyor, ama yan etkiler olabileceğinden biraz endişeliyim. Ayrıca, diğer makinede kurduğum çözüm olacak kadar tanıdık gelmiyor (bir çözüm gerekiyorsa).


+1 - Aynı sorunu yaşıyordum ve - önerdiğin gibi - dosyama eklemek term xtermbenim ~/.screenrciçin düzeltildi. Tekrar teşekkürler!
Justin Ethier

Yanıtlar:


4

Güncellemesinde belirtildiği gibi term xterm, ~/.screenrcdosyaya eklemek bu sorunu çözüyor gibi görünüyor.


Evet .. Evet, ama neden çevre değişkenini geçersiz kılmak yerine screenyaymakla ilgili bir çeşit açıklama yapıyorum . Muhtemelen sahip olmanın önemli olduğu bazı durumlar vardır . $TERM"screen"$TERM == screen
intuited

3
@intuited: Ekran setlerinin nedeni TERM=screen, içinde çalışan uygulamaların bir Ekran terminali içinde iletişim kurmasıdır: Gönderdikleri ve aldıkları kontrol sekansları, Ekranın görüntülenen terminalinin değil Ekran ile aynıdır. Bir Ekran oturumunu ayırabildiğinizden ve farklı bir terminale yeniden bağlayabildiğiniz için, bu dolaylı katman gereklidir.
Gilles 'SO- kötü olmayı bırak

@Gilles: Teşekkürler, böyle bir şeyden şüphelendim. Bunu sıfırlamaktan ne tür sorunlar ortaya çıkabilir xterm?
intuited

1
Çok fazla değil, çünkü xterm ve ekran çoğunlukla uyumludur. Ancak her birinin diğerinin yapmadığı birkaç özelliği vardır ve uygulamalara yalan söylerseniz, gerçekten çalışmayan bir yetenek kullanabilirler. Çıktısını karşılaştırın infocmp screenve infocmp xtermve ekran çıkış sıralarını ile xterm kaçış dizileri . Teklif edeceğim bir arıza yok; çoğu uygulama aldırmaz, ancak birkaçı sinir bozucu davranabilir.
Gilles 'SO- kötü olmayı kes

2

Çalışan işlemlerde çalışan terminali ayarlamanın birkaç yolu daha vardır:

  • Çalışan ekran durumda, pres ^A- :ve komutu veren term xtermneden olacaktır yeni açılan onların başlamak o örneğe altında ekranlar $TERMiçin ortam değişkeni kümesi xterm; bu da çağrılan vimörneklere yayılacaktır . Bu vim örnekleri, CTRL-kombinasyonları ile ilgili uygun davranışı gösterir; Bu stratejinin henüz herhangi bir yan etkisi keşfetmedim. Bu komut mevcut ekranları etkilemez. Bu komut elbette bir ~/.screenrcdosyada kullanılabilir , bu nedenle bu yöntemin diğer makinede kullanılması mümkündür.

  • Çalışan bir vim örneğinde, komut set term=xtermCTRL kombinasyonlarının o vim örneğinde çalışmasını sağlar. Bu, henüz anlamadığım nedenlerle X panosunun (yani @*ve @+) bağlantısının kesilmesinin yan etkisi vardır . İlginç bir şekilde, pano yan etkisi, komut :set term=screenile başlayan bir vim örneğinde yürütüldüğünde de ortaya çıkar $TERM=xterm.


Bu cevap OP'nin güncellemelerinden alınmıştır. Tek yaptığım biraz yeniden biçimlendirmek ve yeniden sarmaktı.
phunehehe

2

Temel sorun, screengerçek terminal ( TERMdış ortam değişkeni tarafından tanımlanır screen) ile içindeki öykünme arasında yapılan eşlemenin screeneksik olmasıdır.

Test ederseniz ( vttest veya tack kullanarak ), aşağıdakiler için eksiklikler görebilirsiniz:

  • renkler
  • özel tuşlar

Ayarlayarak bu sorunları gidermek için çalışılıyor termiçinde .screenrcsadece için çalıştığını dezavantajı var bir gerçek-terminal verilen ve diğer uç uygulamaları için portatif değildir. dokümantasyon notları

Komut terimi kullanımının varsayılan olmayan amaçlarla kullanılması önerilmez.

Bu özelliği screen belgelerden kullanan başka bir çözüm (farklı bir dezavantajla) vardır :

Ekran kendisi için bir terminal adı bulmaya çalıştığında, önce ekran adında bir girdi arar . terim (burada terim$TERM değişkeninizin içeriği) . Böyle bir giriş yoksa, ekran çalışır screen(veya screen-wterminal genişse (132 veya daha fazla sütun)). Bu giriş bile bulunamazsa, vt100yedek olarak kullanılır.

ncurses, ekran eşlemesindeki sorunları onarmak için bu durum için birkaç yararlı alternatif terminal açıklaması sağlar, örneğin screen.xterm-new . Pratikte, kullanıyorum TERM=xterm-newve ekranı çalıştırırken, işlev tuşlarının kullanılabilir bir eşlemesini alıyorum .

Ekranın termayarlarına geri dönersek , testte bu alternatiflerde ele alınan haritalamada hala sorunlar olduğunu fark edebilirsiniz . Kullanarak doğru bir terminal açıklaması almak mümkün termolsaydı, bu alternatifler basit takma adlar olurdu screen. Onlar değil.

ncurses'in yok değil sağlamak screen.xterm(sic), çünkü:

Bununla birlikte, genel olarak, alternatif adları kullanmak term, sizin kullanımınıza göre bir gelişmedir .screenrc: yarattığından daha fazla problemi çözer. Bunun tersi termayar için geçerlidir .

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.