Kelimeleri atlamak için Alt-Left, terminal emülatörlerinde çalışmıyor


16

Önceki işteki Debian Wheezy makinesinde, etkin komut satırındaki (bash) kelimeler arasında atlamak için Alt + Sol ve Alt + Sağ tuşlarına alıştım.

Ancak, evde Jessie'ye (Debian 8.0, test dalı) yükselttiğimden bu artık çalışmıyor: Alt-Left, önceki kelimeye atlamak yerine Dveya gibi bir şey yazdırıyor [D. OTOH, ssh'ı açar ve başsız Debian Wheezy'e bağlanırsam, mükemmel çalışır.

Dahası, yeni işime Fedora 20'yi yeni kurdum ve burada davranış aynı. Bu bash, csh ve ksh (altında başladı env -i), ayrıca rxvt-unicode ve xfce4-terminal için geçerlidir, bu nedenle bu seviyenin dışında bir şey olmalıdır.

Farkı bulmak için yığının başka neresinde görünmeliyim?


4
Daha evrensel oldukları için alt-b ve alt-f'yi (okuma satırı tuşlarının geri kalanını da) denemenizi ve komut satırı programlarının birçoğu readline bağlarını onurlandırmayı öneririm.
çekingen

Yanıtlar:


21

Muhtemelen yükseltme sırasında kaybolan yerel ~/.inputrcveya global bir /etc/inputrcdosya tanımlamışsınızdır. ~/.inputrcAşağıdaki satırları içeren bir dosya oluşturmak kolay bir çözümdür :

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Olanlar çalışacak xtermve terminatorve gnome-terminalancak kudreti ihtiyacı diğer terminaller için çimdiklenecek. Ne yazık ki, her terminal öykünücüsü farklı bir sözdizimi kullanabilir. Daha fazla ayrıntı için cevabımı buradan görebilirsiniz .


Gerçekten Alt demek istedim ve hala uzak makinede çalışıyor. Sekmeyi sola ve sağa hareket ettirmek için Ctrl + Sol / Sağ zaten Rxvt'de alınmıştır (Shift + Sol / Sağ sekmeleri değiştirir ve Shift + Aşağı yeni bir sekmeyi açar).
Alois Mahdal

1
Bu arada Ctrl + Sol / Sağ GUI editörlerinde yaygın olsa da, terminalleri henüz bu kombinasyonu görmediğim tamamen farklı bir dünya.
Alois Mahdal

10

terdon beni doğru yöne çevirdi : inputrc file.

Suçlu, sezgisel olmayan bir şekilde, readline6'nın aslında / etc / inputrc yerine ~ / .inputrc kullanmasıdır; bu, readline'ın (3) vurgulamadığı veya reddetmediği:

Bu dosyanın adı INPUTRC ortam değişkeninin değerinden alınır. Bu değişken ayarlanmamışsa, varsayılan ~ / .inputrc'dir. Bu dosya yoksa veya okunamıyorsa, nihai varsayılan / etc / inputrc'dir.

Bu nedenle, her iki Debian makinesinde / etc / inputrc, libreadline6 paketi tarafından sağlananla aynı olsa da (sürüm de aynıdır), yeni makinede ~ / .inputrc tek satırla bulunur:set bell-style none . Bu dosya silindiğinde, hepsi iyi çalışır (aşağıdaki notlara bakın).

Yarına kadar Fedora'yı kontrol edemiyorum ama sanırım aynı sorun. Güncelleme: Fedora'da, ~ / .inputrc yoktu, burada / etc / inputrc basitçe farklıdır, bu yüzden bunu tanımlamayabilir. Bir düzeltme olarak Debian'ın inputrc'sini ~ / .inputrc olarak kaydettim.


Notlar:

7> 8 yükseltme sırasında nasıl değiştiği gizemi hala çözülmedi, ancak kısmen kötü hafızama ve kasıtsız nokta dosyalarının hokkabazlığına açıklanabilir. (BTW bu APT yükseltme değildi ama yerine yeniden yükleyin ve manuel dotfile böylece belki ~ .inputrc bir şekilde yol aldım.)

Ayrıca, Tamam dediğimde, Rxvt hariç her yerde Ctrl ile çalıştığını kastediyorum (Tamam, ben sadece xfce4 terminalini kontrol ettim ama Rxvt'in normal isyancı olduğunu biliyoruz), çünkü bu görünüşe göre Ctrl Rxvt tarafından alındığı için -spesifik işlev - etkin sekmeyi listede taşı.

Manpage'den bahsedildiği gibi, bash ile şu anda sahip olduklarınızı araştırmak için yerleşik bağlama komutunu kullanabilirsiniz.


Güzel yakalama, +1. Aslında, düşündüğünüzden daha sezgisel. Varsayılan davranış, kullanıcıya özgü nokta dosyalarının sistem genelindeki varsayılanlara göre önceliğe sahip olmasıdır. Aksi takdirde, kullanıcılar ayarlarını değiştiremezler.
terdon

Alt + okların nasıl etkinleştirileceğini öğrenmek için güncellenmiş cevaba bakın.
terdon

2
Bu normaldir, bunu da okumak istiyorsanız $include /etc/inputrcüst kısmına ihtiyacınız vardır ~/.inputrc.
Chris Down

mükemmel sistem genelinde önce kullanıcı ayarlarını tercih mantıklı @terdon, ama ne olacağı gibi daha sezgisel göreceğini ~ / .initrc olurdu / etc / initrc'nin (yani / etc / initrc'nin olurdu içine "birleşti" $included varsayılan olarak).
Alois Mahdal

1
Bkz. 1. sabit kodlu seçenekler, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. sabit kodlu seçenekler 2. / etc / initrc OR ~ / .initrc. İlk yol çok daha esnektir, çünkü kolayca daha düşük bir seviyeye genişletilebilir (örneğin, proje başına, bu örneğin readline ile pek mantıklı olmadığını ama amacını anladığınızı itiraf ediyorum).
Alois Mahdal
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.