Не могу использовать клавишу ввода для выполнения команд в Zsh

691
Mike A

Я недавно установил zsh (v5.1.1) в новой настройке Ubuntu, но когда я переключаюсь на него в gnome-терминал, я не могу использовать клавишу ввода для выполнения команды. Единственный способ выполнять команды - использовать CTRL+J. Я могу повторить это через другие эмуляторы термина как xtermи uxterm.

Все остальные ключи работают нормально, включая ключи HOME, END, PGUP, PGDOWN, DEL и INSERT.

Я zshмного раз устанавливал на другие системы, но никогда не сталкивался с подобной проблемой. Что мне нужно изменить, чтобы заставить клавишу ввода работать нормально?

Мой /etc/zsh/zshrcфайл:

typeset -ga debian_missing_features  if [[ -z "$DEBIAN_PREVENT_KEYBOARD_CHANGES" ]] && [[ "$TERM" != 'emacs' ]] then  typeset -A key key=( BackSpace "$" Home "$" End "$" Insert "$" Delete "$" Up "$" Down "$" Left "$" Right "$" PageUp "$" PageDown "$" )  function bind2maps () { local i sequence widget local -a maps  while [[ "$1" != "--" ]]; do maps+=( "$1" ) shift done shift  sequence="$" widget="$2"  [[ -z "$sequence" ]] && return 1  for i in "$"; do bindkey -M "$i" "$sequence" "$widget" done }  bind2maps emacs -- BackSpace backward-delete-char bind2maps viins -- BackSpace vi-backward-delete-char bind2maps vicmd -- BackSpace vi-backward-char bind2maps emacs -- Home beginning-of-line bind2maps viins vicmd -- Home vi-beginning-of-line bind2maps emacs -- End end-of-line bind2maps viins vicmd -- End vi-end-of-line bind2maps emacs viins -- Insert overwrite-mode bind2maps vicmd -- Insert vi-insert bind2maps emacs -- Delete delete-char bind2maps viins vicmd -- Delete vi-delete-char bind2maps emacs viins vicmd -- Up up-line-or-history bind2maps emacs viins vicmd -- Down down-line-or-history bind2maps emacs -- Left backward-char bind2maps viins vicmd -- Left vi-backward-char bind2maps emacs -- Right forward-char bind2maps viins vicmd -- Right vi-forward-char  # Make sure the terminal is in application mode, when zle is # active. Only then are the values from $terminfo valid. if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then function zle-line-init () { emulate -L zsh printf '%s' $ } function zle-line-finish () { emulate -L zsh printf '%s' $ } zle -N zle-line-init zle -N zle-line-finish else for i in mkx; do (( ${+terminfo[$i]} )) || debian_missing_features+=($i) done unset i fi  unfunction bind2maps fi # [[ -z "$DEBIAN_PREVENT_KEYBOARD_CHANGES" ]] && [[ "$TERM" != 'emacs' ]]  zstyle ':completion:*:sudo:*' command-path /usr/local/sbin \ /usr/local/bin \ /usr/sbin \ /usr/bin \ /sbin \ /bin \ /usr/X11R6/bin  (( ${+aliases[run-help]} )) && unalias run-help autoload -Uz run-help  # If you don't want compinit called here, place the line # skip_global_compinit=1 # in your $ZDOTDIR/.zshenv or $ZDOTDIR/.zprofile if [[ -z "$skip_global_compinit" ]]; then autoload -U compinit compinit fi 
0
Сначала я бы проверил привязки клавиш для `CTRL + J` и` CTRL + M`, например, с помощью этой команды `bindkey | grep -E "^ \" \ ^ (J | M) "`. mpy 7 лет назад 0
У меня есть "accept-line" для обоих. `" ^ J "accept-line" ^ M "accept-line` Mike A 7 лет назад 0
Создает ли клавиша `ENTER` новые строки после запуска` cat` без каких-либо аргументов? Попробуйте также, если он работает должным образом при вызове _zsh_ без какой-либо конфигурации через `zsh -f`. mpy 7 лет назад 0
Клавиша `ENTER` не создает никаких новых строк. Однако `zsh -f` сработало. Похоже что-то в моем `/ etc / zsh / zshrc` тогда? Mike A 7 лет назад 0
Действительно ли `ENTER` генерирует любую из последовательностей клавиш` ^ M` и `^ J`. Вы должны быть в состоянии проверить это с помощью `CTRL + V`, за которым следует` ENTER`. Adaephon 7 лет назад 0

1 ответ на вопрос

1
Barry

Чтобы вывести символ, который zsh связывает с каждой клавишей, введите ⌃v, а затем символ. (где ⌃ - управляющий символ)

Например:

  • мой ключ возврата выводит: ^ M
  • мои входные ключи: ^ [ОМ

Чтобы заставить мой ключ ввода вести себя как мой ключ возврата:

bindkey ^[OM accept-line 

Похожие вопросы