Чому Ctrl-Arrow не працює в bash на OS X?


15

Я використовую Ctrl- і Ctrl- у кожній системі Linux, над якою працюю, але ці комбінації клавіш не працюють на моєму Macbook Pro. На ньому працює Snow Leopard, і я використовую вбудований додаток Terminal.

Здається, комбінації клавіш нічим не захоплюються ні до, ні до терміналу, тому що якщо я перейшов на один із моїх серверів Linux, я можу використовувати Ctrl- / для переходу до наступного / попереднього слова в командному рядку. Однак, коли я спробую цю комбінацію клавіш в баші на моєму Macbook, я просто отримую "C" для правої стрілки та "D" для лівої стрілки.

Будь-які ідеї, як я можу змусити ці клавіші працювати в Дарвін-Баші?


2
Якщо ви використовуєте пробіли, клавіша Ctrl + стрілка за замовчуванням перемикає пробіли.
mark4o

Відповіді:


13

OS X використовує ключ emacs, що прив'язує мою замовчуванням. Це правда практично у кожному додатку на OS X, це досить приємно. Це означає, що Са та Се - це початок / кінець рядка. Ви також отримуєте чудове зворотне слово вбивство з M-backspace, о, і kill-line з Ck.

Це повинно означати, що у вашому терміналі вперед / назад слово прив'язане до Mf та Mb відповідно (M = Meta = alt / option), однак це не так. У OS X передні / бекслове слова за замовчуванням прив’язані до M- → та M- ←.

Ви можете змінити цю поведінку, змінивши спосіб налаштування бібліотеки читання GNU для вашого облікового запису. Це відбувається у вашому ~/.inputrcфайлі. Тут ви можете отримати великий список команд, що поєднують файли man readline, а також в онлайновій документації, подібній цій. .

Отже, щоб відповісти на ваше запитання, ви хочете перезаписати те, що робить Readline, коли він побачить C- → і C- ←, щоб зробити те, що робиться на вашому сервері Linux.

Синтаксис ~/.inputrcфайлу досить простий для того, що ви хочете зробити: key-sequence: action.

Це має бути те, що вам потрібно, щоб отримати бажану поведінку:

"\e[5C": forward-word
"\e[5D": backward-word

Ось ще одна сторінка з додатковими корисними прив’язками.

(Ви, ймовірно, можете піти з копіювання / etc / inputrc зі свого вікна Linux на вашу ОС X ~ / .inputrc)


Примітка: Якщо ви багато використовуєте tmux з xterm-клавішами, вам також знадобиться, \e[1;5Cа \e[1;5Dтакож запустити forward-wordі backward-word.
Арн

3
Ще одна примітка: якщо вона все ще не працює, це може бути через ярлик конфлікту з контролем місії / просторами. Налаштування системи -> Клавіатура -> Комбінації клавіш -> Керування місією, перемістіть пробіл вліво / вправо
bhh1988

Я не розумію, що "OS X використовує прив'язку клавіш emacs за замовчуванням." "Ctrl-стрілка" - це також прив'язка ключа emacs.
Грег

3

помістити в ~/.inputrcнаступні рядки:

"\e[5C": forward-word
"\e[5D": backward-word

0

Ці дні здається, що послідовності втечі, які Ctrl-стрілки виводять у терміналі, змінилися. Ось що працює для мене станом на сьогодні (кінець 2018 року):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Примітка. Ви завжди можете з'ясувати фактичні послідовності втечі, ввівши cat -vтермінал та натиснувши клавішу Ctrl ліворуч або клавішу Ctrl вправо. Ось зразок виводу для моєї власної стрілки Ctrl-Left:

^[[1;5C ^[[1;5C

Для перекладу на .inputrcлінгво замініть знак втечі ^[на \eта вставте результат всередині подвійних лапок.


0

Як зазначалося @ bhh1988, конфігурація управління місією перешкоджає роботі клавіш Ctrl з клавішами зі стрілками bash. Я не хотів заважати цим ярликам, тому замість цього використовую клавішу Option (тобто Alt). В даний час на Mojave, що використовує німецьку клавіатуру (не знаю, чи це актуально), я вкладаю наступне, .inputrcщоб використовувати стрілку "Опція-вліво" та "Опція-Право-Стрілка" для переміщення між словами.

"\e\e[C": forward-word
"\e\e[D": backward-word

0

ОНОВЛЕННЯ Січень 2020 року

У новітніх версіях OSX оболонка за замовчуванням zsh. Тому магічний заклик змусити ctrl-arrowleft та ctrl-arrowright працювати, як очікувалося, є наступним:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(покладіть його у свій .zshrc)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.