Alt-Left для пропуску слів не працює в емуляторах терміналів


16

На попередній роботі Debian Wheezy я звик до Alt + Left та Alt + Right, щоб переходити між словами в активному командному рядку (в bash).

Однак, оскільки вдома я перейшов до Джессі (Debian 8.0, тестова галузь), це більше не працює: замість того, щоб перейти до попереднього слова, Alt-Left друкує щось на кшталт Dабо [D. ОТО, якщо я відкрию ssh і підключуся до свого безголівкового Debian Wheezy, він спрацьовує ідеально.

Крім того, я щойно встановив Fedora 20 на своїй новій роботі, і тут поведінка така ж. Це стосується bash, csh та ksh (розпочато під env -i), а також rxvt-unicode та xfce4-термінал, тому повинно бути щось поза цим рівнем.

Куди ще в стеку слід шукати різницю?


4
Я б запропонував спробувати alt-b і alt-f (як і решта клавіш readline), оскільки вони більш універсальні, і досить багато програм командного рядка вшановують прив'язки читання.
демуре

Відповіді:


21

Можливо, у вас був визначений локальний ~/.inputrcабо глобальний /etc/inputrcфайл, який був втрачений під час оновлення. Просте виправлення - створити ~/.inputrcфайл із такими рядками:

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

Вони працюватимуть із xtermта terminatorта, gnome-terminalале, можливо, їх потрібно буде налаштувати для інших терміналів. На жаль, кожен емулятор терміналу може використовувати різний синтаксис. Детальніше дивіться мою відповідь тут .


Я справді мав на увазі Alt, і він все ще працює на віддаленій машині. Ctrl + вліво / вправо вже прийнято в Rxvt для переміщення вкладки вліво і вправо (Shift + Вліво / Вправо перемикання вкладок і Shift + Вниз відкриття нової).
Алоїз Магдал

1
До речі, хоча Ctrl + Left / Right є поширеним у редакторах GUI, термінали є зовсім іншим світом, де я ще не бачив цієї комбінації.
Алоїз Магдал

10

terdon встановив мене в правильному напрямку: файл inputrc .

Винуватець у тому, що зовсім неінтуїтивно, readline6 фактично використовує ~ / .inputrc замість / etc / inputrc, що readline (3) не підкреслює і не спростовує:

Ім'я цього файлу взято зі значення змінної середовища INPUTRC. Якщо цю змінну не встановлено, типовим є ~ / .inputrc. Якщо цього файлу не існує або його неможливо прочитати, кінцевим типом є / etc / inputrc.

Таким чином , в той час як на обох машинах Debian / і т.д. / INPUTRC ідентична забезпеченому libreadline6 пакета (версія та ж, а), на новій машині ~ / .inputrc існує з одним рядком: set bell-style none. Коли цей файл буде видалений, все працює добре (див. Примітки нижче).

Я не можу перевірити Fedora до завтра, але, мабуть, це та сама проблема. Оновлення: У Fedora ~ / .inputrc не існувало, тут / etc / inputrc просто інший, тому він може не визначати це. Як виправлення, я просто зберегла вхід Dec Debian як мій ~ / .inputrc.


Примітки:

Таємниця, як вона змінилася під час оновлення 7> 8, залишається невирішеною, але частково можна пояснити мою погану пам’ять та деякі ненавмисні жонглювання дотфілів. (До речі, це було не оновленням APT, а скоріше перевстановлення та ручне переміщення dotfile, тому, можливо, ~ .inputrc якось перешкодив.)

Крім того, коли я скажу «ОК», я маю на увазі, що він працює з Ctrl скрізь, крім Rxvt (Гаразд, я перевіряв лише xfce4-термінал, але ми знаємо, що Rxvt є звичайним бунтарем), де це перестановлено на Alt, мабуть тому, що Ctrl взято Rxvt -видова функціональність - переміщення активних вкладок у списку.

Як згадується manpage, за допомогою bash ви можете використовувати вбудовану команду bind для дослідження того, що у вас є.


Хороший улов, +1. Насправді це більш інтуїтивно, ніж ви думаєте. Типова поведінка за замовчуванням має для певних користувачем точкових файлів перевагу над загальносистемними типовими налаштуваннями. В іншому випадку користувачі не зможуть змінити свої налаштування.
terdon

Дивіться оновлену відповідь про те, як спеціально увімкнути стрілки Alt +.
terdon

2
Це нормально, вам потрібно $include /etc/inputrcвгорі, ~/.inputrcякщо ви хочете прочитати це також.
Кріс Даун

@terdon цілком має сенс віддати перевагу налаштуванням користувачів перед загальносистемними, але те, що я вважаю більш інтуїтивним, було б, щоб ~ / .initrc був "об'єднаний" у / etc / initrc (тобто / etc / initrc було б $included за замовчуванням).
Алоїз Магдал

1
Див.: 1. важко кодовані варіанти, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. важко кодовані варіанти 2. / etc / initrc OR ~ / .initrc. Перший спосіб набагато гнучкіший, оскільки його можна легко розширити на нижчий рівень (наприклад, за проектом, і я визнаю, що цей приклад не має великого сенсу в режимі читання, але ви розумієте).
Алоїз Магдал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.