ฉันเพิ่งติดตั้ง zsh (v5.1.1) ในการตั้งค่า ubuntu ใหม่ แต่เมื่อฉันเปลี่ยนไปใช้ใน gnome-terminal ฉันไม่สามารถใช้คีย์ Enter เพื่อเรียกใช้คำสั่งได้ CTRL+J
วิธีเดียวที่ฉันสามารถรันคำสั่งโดยใช้ ผมสามารถทำซ้ำนี้ทั่วเลียนแบบคำอื่น ๆ เช่นและxterm
uxterm
ปุ่มอื่น ๆ ทั้งหมดทำงานได้ดีรวมถึงปุ่ม HOME, END, PGUP, PGDOWN, DEL และ INSERT
ฉันติดตั้งzsh
ระบบอื่น ๆ มาแล้วหลายครั้ง แต่ไม่เคยเจอปัญหาแบบนี้มาก่อน ฉันต้องเปลี่ยนอะไรเพื่อให้ปุ่ม Enter ทำงานได้ตามปกติ
/etc/zsh/zshrc
ไฟล์ของฉัน:
typeset -ga debian_missing_features
if [[ -z "$DEBIAN_PREVENT_KEYBOARD_CHANGES" ]] &&
[[ "$TERM" != 'emacs' ]]
then
typeset -A key
key=(
BackSpace "${terminfo[kbs]}"
Home "${terminfo[khome]}"
End "${terminfo[kend]}"
Insert "${terminfo[kich1]}"
Delete "${terminfo[kdch1]}"
Up "${terminfo[kcuu1]}"
Down "${terminfo[kcud1]}"
Left "${terminfo[kcub1]}"
Right "${terminfo[kcuf1]}"
PageUp "${terminfo[kpp]}"
PageDown "${terminfo[knp]}"
)
function bind2maps () {
local i sequence widget
local -a maps
while [[ "$1" != "--" ]]; do
maps+=( "$1" )
shift
done
shift
sequence="${key[$1]}"
widget="$2"
[[ -z "$sequence" ]] && return 1
for i in "${maps[@]}"; 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' ${terminfo[smkx]}
}
function zle-line-finish () {
emulate -L zsh
printf '%s' ${terminfo[rmkx]}
}
zle -N zle-line-init
zle -N zle-line-finish
else
for i in {s,r}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
ฉันได้รับ
—
Mike A
accept-line
ทั้งสองอย่าง "^J" accept-line "^M" accept-line
ที่ไม่
—
mpy
ENTER
สำคัญผลิตสายใหม่หลังจากที่เริ่มต้นcat
โดยไม่ขัดแย้งใด ๆ ลองนอกจากนี้ยังถ้ามันทำงานตามที่คาดไว้เมื่ออัญเชิญzshโดยไม่ต้องตั้งค่าใด ๆ zsh -f
ผ่านทาง
ENTER
ที่สำคัญไม่ได้ผลิตสายใหม่ใด ๆ อย่างไรก็ตามzsh -f
ทำงานได้ ดูเหมือนว่าบางอย่างในฉัน/etc/zsh/zshrc
แล้ว?
ไม่
—
Adaephon
ENTER
จริงสร้างอย่างใดอย่างหนึ่งของลำดับที่สำคัญและ^M
^J
คุณควรจะสามารถที่จะตรวจสอบเรื่องนี้ด้วยตามมาด้วยCTRL+V
ENTER
CTRL+J
และCTRL+M
เช่นกับคำสั่งbindkey | grep -E "^\"\^(J|M)"
นี้