1

Я открыл zsh на удаленном компьютере под управлением Fedora 13 (да, он старый). При наборе Backspace все работает нормально, но ничего не происходит, когда я набираю home (Ctrl+A делает работу как положено). Но при запуске подоболочки Python 2.7 мой backspace печатает ^? вместо удаления самого последнего символа и начальных отпечатков ^[OH , а Ctrl+A печатает ^A

Такое поведение я не вижу, когда я нахожусь в своем обычном Linux Mint на локальной машине, где все работает нормально. Кто-нибудь знает, как это происходит и что я могу сделать, чтобы решить это? Спасибо

1 ответ1

0

Как отметил @BrandonInvergo в комментариях, это две разные проблемы. Поскольку я не знаю Python, я концентрируюсь только на конкретной проблеме zsh .

Оболочка Z использует редактор Z-линии (zle) для взаимодействия с пользователем. Привязки клавиш настраиваются с помощью встроенной команды bindkey (более подробную информацию смотрите в man zshzle ). Существуют разные раскладки клавиш, например, когда вы набираете в приглашении, раскладка main раскладки активна, если вы используете zed (простой, но часто очень удобный редактор файлов), раскладка раскладки zed активна и т.д.

Вы можете отобразить текущие привязки клавиш с помощью bindkey -M [keymap] , main раскладка клавиатуры используется по умолчанию, поэтому в большинстве случаев вы можете просто пропустить параметр -M [keymap] .

Теперь давайте посмотрим на вашу конкретную проблему:

CTRL+A (обозначается как ^A) переходит к началу строки, поэтому вы, вероятно, использовали bindkey -e где-то в своих файлах RC (либо в своем личном ~/.zshrc , но это также может быть выполнено в некоторой общесистемной конфигурации). например /etc/zshrc), чтобы активировать привязки ключей emacs :

$ zsh -f
$ bindkey -e
$ bindkey | head -n 3
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char

Чтобы иметь такое же поведение для клавиши HOME , вам нужно идентифицировать полученную строку (которая зависит от используемого вами эмулятора терминала). Простой трюк - запустить cat и нажать нужную клавишу. Это вывод с использованием xterm для клавиши HOME и END :

$ cat
^[[H^[[F

Итак, длинный текст, короткое сообщение - вы хотите поместить эти строки в ваш файл ~/.zshrc (но после команды bindkey -e ):

bindkey "^[[F" end-of-line
bindkey "^[[H" beginning-of-line

И, пожалуйста, не забудьте source ~/.zshrc ... тогда эти два ключа должны работать как нужно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .