Выдача клавиш Ctrl + стрелка влево / вправо

25

После последнего обновления системы команда ctrl + стрелка влево / вправо на терминале zsh ничего не делает. Также ctrl + u имеет что-то не так, потому что обычно эта команда стирает с курсора в начало строки, а теперь стирает всю строку .. Кто-то знает, как решить эти проблемы? Спасибо вам всем.

riskio
источник
Вы нашли приемлемый ответ? Я думаю, что ответ Гонсало отличный.
Лео Леопольд Герц 준영

Ответы:

44

FWIW, это то, что работало в моей среде (rhel5.x) с использованием zsh по умолчанию.

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
Goncalo
источник
5
^[^[[Dи ^[^[[Cсоответственно для OSX
Jon Z
1
Подтверждено, что предложение Гонсало работает и в Debian 8.5. Мне просто интересно, почему этот код не встроен .zshrcпо умолчанию.
Лео Леопольд Герц 준영
Работает как шарм в Ubuntu Artful, спасибо!
Конрад Гарус
На случай, если кто-то захочет использовать $terminfoвместо escape-последовательности: ключи $terminfo[kLFT5]и $terminfo[kRIT5]сработали для меня
Griddo
14

Ctrl + U наиболее вероятно, потому что у вас есть курсор в конце строки. Во-вторых, какую версию Gentoo вы называете «последним обновлением системы»?

И что бы вы хотели сделать Ctrl + влево / вправо?

  • Добавьте в конфигурацию zsh:

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

  • И из старого лома я нашел (может помочь):

bindkey ";5C" forward-word
bindkey ";5D" backward-word

  • или посмотрите на эту ссылку, которая должна вам помочь?

Примечание: Если конфигурация работает, но предполагаемые ключи не выполняют то, что вам нужно, возможно, потому что определение ключа отличается от вашего и моего, сделайте: cat > /dev/null и нажмите клавиши, которые вы хотите получить, и соответственно отрегулируйте.

Torxed
источник
1
«Ctrl + U, скорее всего, потому что у вас есть курсор в конце строки», конечно, я имею в виду, когда мой курсор находится посередине. «А что бы вы хотели сделать ctrl + left / right?» обычно Ctrl + стрелка влево: пропустить слово влево и т. д.
riskio
А какую оболочку / терминал вы используете? Вы уверены, что используете Emacs или любой другой терминал, который вы обычно используете, и / bin / bash? ты бежишь через экран?
Торксед
1
пожалуйста, прочитайте вопрос есть ..
Riskio
1
@ Маси Не уверен, я ответил за два года до него, и наши ответы почти идентичны, я просто показал два разных способа сделать это ... и вы можете объединить их оба, чтобы объединить то, что он написал.
Torxed
1
@Masi Все, что я знаю, это то, что тогда (помните, 2010-2012 годы ... это было давно), эти два (и их сочетание) работали для меня во многих различных системах. Я работал как на Unix, так и на Linux (а он был на Gentoo, ОС с постоянным выпуском). И все еще есть следы этого на многих примерах .. Как этот репозиторий. Теперь, опять же, я не совсем уверен, почему, но это сработало как минимум на двух машинах, поэтому я решил поделиться этим. И уверен, что он более ясен СЕГОДНЯ, и я не против, чтобы он получил все положительные голоса. Это старый пост.
Торксед
5

То, что работает , напрямую не зависит от дистрибутива (Gentoo, Debian, RHEL и т. Д.) Или оболочки (ZSH, KSH, BASH) - это зависит от того, какой terminal emulatorиспользуется, и от его настроек: konsole, terminator, urxvt, lx-терминал и т.д. Дистрибутив может иметь значение, если он использует другую стандартную конфигурацию оболочки (fx. .zshrc), и если используется другая оболочка, которая обрабатывает конфигурацию в этом дистрибутиве, возможно, уже справится с этим.

Вот несколько решений для эмулятора терминала:

urxvt / rxvt-unicode (и, возможно, другие):

bindkey "^[Od" backward-word
bindkey "^[Oc" forward-word

терминатор, консоль и xterm (и, возможно, другие):

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

Для более общего подхода запустите свой терминал, нажмите CTRL-V, а затем комбинацию клавиш, для которой вы хотите код выхода (имя) - в этом случае комбинации клавиш CTRL-leftarrow и CTRL-rightarrow - и поместите выходные данные для каждого комбинация клавиш между двумя кавычками.

miyalys
источник
1
Вы пробовали предложение CTRL-V? Может быть, ваш терминал по-разному интерпретирует нажатия клавиш, поэтому ключ должен быть привязан к разным «символам»?
miyalys
1
Я обновил свой ответ. Есть несколько решений в зависимости от terminal emulatorиспользуемого. Дистрибутив или оболочка не имеют значения. Вероятно, поэтому он и не находится в .zshrc, потому что то, что работает для одного эмулятора терминала, не работает для другого. Но это, вероятно, можно решить, если zshrc fx. прочитайте переменную окружения $ TERM и примените различные настройки bindkey в зависимости от результата.
miyalys
2

Решаемые.

Терминал используется: Konsole .

Чтобы решить: щелкните правой кнопкой мыши на терминале (или настройках в строке меню) -> измените текущий профиль -> отображение клавиатуры -> измените значение по умолчанию (xfree4)

riskio
источник
даже не относится к zsh, но, конечно, исправление - это исправление.
Торксед