Можно ли сопоставить ключи home и end при использовании терминала?

76

homeИ endключи на MacBook Pro можно эмулировать с Fn + стрелка влево или Fn + стрелка вправо. Или при изменении определенных настроек с помощью клавиши Command (Apple) вместо fn.

Ни одна из этих работ не работает в Терминале.

Поскольку мне часто нужно переходить к началу или концу строки, а также хотелось бы прыгать вперед или назад по слову.

Как я могу прыгать по линии в терминале?

AT01
источник

Ответы:

64

Используйте control+ aдля HOME и control+ eдля END в терминале.

Также используйте esc+, fчтобы перейти к началу следующего слова и esc+, bчтобы перейти к началу текущего слова. (Вы должны быть осторожны с текущим и следующим)

Am1rr3zA
источник
2
идеальный! как насчет прыгать по слову? (ctrl-left и ctrl-right в окнах)
01
@ at01 Я обновил свой ответ.
Am1rr3zA
41
Кто разработал ключи для Терминала?!?!
01
4
Я предпочитаю использовать опцию + стрелка влево и опцию + стрелка вправо для перехода к началу слов
Аллан Джикаму
2
Ctrl + a и Ctrl + e работали для меня, но, не прибегая к повторному отображению нажатий клавиш, как предлагают многие здесь, я предпочитаю альтернативу @ AlphaFighter Shift + Home и Shift + End (Shift + Fn + стрелка влево и Shift + Fn + стрелка вправо на клавиатуре MacBook Pro) для начала и конца строки.
Джон Рикс
70

Чтобы ответить на вопрос о том, как получить начало или конец строки, кажется, что по умолчанию Терминал сопоставляет эти ключи с ним:

  • shift + home → начало строки, эквивалентно клавише «home» в обычных терминалах
  • shift + end → end of line, эквивалентный клавише "end" в обычных терминалах

Если вы хотите вернуться домой и закончить «обычным» способом (и не требовать смены), перейдите в [Меню терминала] → Настройки → вкладка «Профили» (или настройки в некоторых версиях OS X) → Под вкладка «Клавиатура».

Затем измените / добавьте эти ключи, чтобы они были следующими: «отправить строку в оболочку»

  • Главная: \033[H
  • конец: \033[F

Вы можете получить \033деталь, нажав клавишу Escape в диалоговом окне редактирования, если вам нужно добавить ее.

Тогда home и end снова будут работать как обычно (фух).

Также обратите внимание, что «alt + ←» и «alt + →» по умолчанию в терминале сопоставляются со словами left и word right, еще одной удобной комбинацией, которую нужно запомнить.

В более поздних версиях Mac OS X, если экран терминала сдвигается вверх или вниз при нажатии клавиши home / end, может потребоваться установить клавишу home и клавишу \033[1~end, \033[4~чтобы получить желаемые результаты (сдвиг не требуется) ,

Не стесняйтесь изменить этот ответ, чтобы добавить более полезные привязки клавиш, так как это вики сообщества.

rogerdpack
источник
5
\ 033 [H и \ 033 [F для дома и конца не работал для меня; однако \ 001 и \ 005 сделали. Вы можете ввести эти коды в диалоговом окне редактирования, нажав Ctrl-A и Ctrl-E. Я использую Zsh, я не уверен, имеет ли это какое-либо значение.
JW.
сдвиг + дом / конец сделал работу
isaias-б
1
Попытка понять это некоторое время, это спасло меня!
Пол Грей,
Это прекрасно работает, когда вы находитесь в реальном приложении терминала локально. Тем не менее, когда вы подключаетесь к машине MacOS, похоже, они больше не работают. Как обойти это ?!
Ахи тунец
2
@AhiTuna SSH - это просто соединение с терминальной сессией, а не соединение с эмулятором терминала. Параметры ввода всегда определяются эмулятором терминала, который вы используете.
Бахсау
39

Похоже, вам нужна помощь с использованием readline и bash. Вот безумный список клавиш, измененный по адресу : http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Перейти к началу строки.
Ctrle Переместитесь в конец строки.
Escf Двигайся вперед на слово.
Escb Двигайся назад на слово.
Ctrll Очистите экран, перепечатывая текущую строку вверху.

Ctrlk Убить текст с текущей позиции курсора до конца строки.
Escd Убить от курсора до конца текущего слова или, если между словами, до конца следующего слова.
EscDel Убить от курсора начало предыдущего слова или, если между словами, начало предыдущего слова.
Ctrlw Убить от курсора до предыдущего пробела. Это отличается от того, EscDelCtrla потому что границы слова отличаются.

Ctrld Удалить символ под курсором.
Ctrl_ Отмените последнее, что вы сделали. Вы можете отменить весь путь до пустой строки.

И вот как вернуть текст обратно в строку. Янкирование означает копирование самого последнего убитого текста из буфера уничтожения.

Ctrly Вытащить последний убитый текст обратно в буфер у курсора.
Escy Вращайте кольцо убийства и дерните новую вершину. Вы можете сделать это, только если предыдущая команда Ctrlyили Escy.

ConstantineK
источник
это неоценимо - спасибо - я бы хотел, чтобы это было доступно где-нибудь для печати!
Мэтт Б
Я понимаю, что это не совсем «оптимизировано», но; Файл -> Распечатать?
Джейсон Салаз,
Вау, это супер неловко по сравнению с термином в Linux. Любой способ переназначить эту ерунду?
БТК
Да, попробуйте страницу руководства Bash. (Я не знаю, как это сделать сам.)
SilverWolf
6

Для тех, кто предпочитает использовать клавиши со стрелками, нажатие fnShift+ Left Arrowприведет вас домой в командной строке. Точно так же fnShift+ Right Arrowприведет вас к концу.

pauln
источник
6

Вы можете перемещать одно слово за раз с помощью option+ leftи option+ right.

Что касается использования homeи end, привязки терминала по умолчанию следующие:

  • shift+ home→ перейти к началу строки
  • shift+ end→ перейти к концу строки
  • home → прокрутить до верхней части буфера обратной прокрутки
  • end → прокрутить до конца буфера обратной прокрутки

Во многих других терминальных приложениях (на нескольких платформах) эти измененные и немодифицированные пары меняются местами (т. Е. Обнажаются homeи endиспользуются для перехода по текущей строке, а измененные версии (будь shiftто или что-то еще) используются для навигации по буферу обратной прокрутки). ). Вы можете отменить привязки Терминала для работы таким образом, если хотите, выполнив следующие действия:

Перейдите в меню «Терминал» → «Настройки» → «Настройки» / «Профиль» → «Под вкладка« Клавиатура »»

Затем измените пары ключ-действие, чтобы они были следующими:

  • ↖︎: отправить текст: \ 033 [H
  • ⇧↖︎: прокрутить вверх
  • ↘︎: отправить текст: \ 033 [F
  • ⇧↘︎: прокрутить вниз

Примечание: \ 033 вводится в поле текста для отправки в диалоговом окне «Редактирование» нажатием клавиши «Escape».

В то время как там, вы можете аналогичным образом поменять привязки измененных и неизмененных page upи page down, чтобы сохранить вещи согласованными: нажатие клавиши навигации с shiftпредставляет команду для самого терминала (для навигации по буферу обратной прокрутки, как документ), при нажатии один без посылает нажатие клавиши через к тому , что бежит в ней (например bash, less, nano, screenи т.д.). Пары ключ-действие для этого:

  • ⇞: отправить текст: \ 033 [5 ~
  • ⇧⇞: прокрутить страницу вверх
  • ⇟: отправить текст: \ 033 [6 ~
  • ⇧⇟: прокрутить страницу вниз
Терри Н
источник
4

Другие ответы великолепны и более переносимы, но вот «способ OS X» для обычной клавиатуры (которая противоположна многим другим терминалам). Попробуйте следующее:

ShiftHome- начало строки
ShiftEnd- конец строки

С http://www.greenend.org.uk/rjk/tech/macbits.html

Альфа Истребитель
источник
4

Сопоставление homeи endключи с желаемой функциональностью легко решат проблему.

Многие ответы были опубликованы, но если вы используете zsh, вы можете установить home:

\001

и установите endдля:

\005

нажав предпочтение - профиль - клавиатура.

Дин Сео
источник
Я тоже это попробовал, но потом он ломает Home и End в vim :( Вы можете сопоставить их с тем, что предложил Альфредо Кардильяно: Ключ: ↖ Действие: \ 033OH Ключ: ↗ Действие: \ 033OF
curlingdude
Это отлично сработало для меня! Я использую только Nano, поэтому здесь нет проблем.
Стерлинг Борн
Да, это работает, но не решает проблему в целом. Я перешел с bash на zsh и использовал FN-SHIFT-LEFT / RIGHT .. это решило мою проблему: stackoverflow.com/questions/8638012/…
vlk
1

Это самый эффективный способ заставить его работать и с vim. Перейдите в Терминал -> Настройки -> Профили -> Клавиатура и добавьте:

Ключ: ↖ Действие: \ 033OH

Ключ: ↗ Действие: \ 033OF

Альфредо Кардильяно
источник
1

Я хотел бы предложить альтернативное решение этой проблемы. Это прекрасно работает, если вы являетесь пользователем vi. Привязка ключей Vim в терминале позволяет использовать терминал в стиле vim. Вы можете сделать это, набрав set -o viв терминале, и можете свободно вводить его, .bash_profileесли хотите. После этого ваш терминал фактически является редактором vim. Вы можете использовать escклавишу, чтобы перейти в командный режим и ходить в Vim пути. Например, 0приводит вас в начало и $приводит к концу. Вы также можете использовать Iи Aдля перехода в начало и конец и сразу же перейти в режим редактирования. wи bпусть вы будете двигаться вперед и назад на одно слово. И если вы попытаетесь перейти в визуальный режим, нажавv, вам будет предоставлен редактор vim, и текст, который у вас будет при выходе из этого редактора, будет выполнен в терминале.

Имейте в виду, что эта привязка ключей vim аннулирует все горячие клавиши, которые вы узнали из других ответов.

Fxyang
источник
0

вот список в печатной форме, по желанию :)

http://pastebin.com/uCqwn7qs

Я также исправил "ошибку" в описании. Это то, что вы могли изначально прочитать в инструкции:

ESC-d Убить от курсора начало предыдущего слова или, если между словами, начало предыдущего слова.

Это плохо пахнет как ошибка «вырезать и вставить», поскольку оба частичных предложения говорят об одном и том же. Исходя из простой логики, первая половина должна фактически прочитать «от курсора до начала текущего слова».

the_helping_hand
источник
0

... как насчет прыгать по слову? (Ctrl-левый и Ctrl-правый в окнах)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
Calu
источник