tôi thấy đó là một sự kết hợp:
Một
Các nhà phát triển ZSH không nghĩ rằng ZSH cần xác định những hành động của Trang chủ, Kết thúc, Del, ... keys.
Debian và Ubuntu sửa lỗi này bằng cách xác định các hành động bình thường mà người dùng trung bình mong đợi trong tệp /etc/zsh/zshrc
toàn cầu. Theo các mã có liên quan (nó giống nhau trên Debian và Ubuntu):
if [[ "$TERM" != emacs ]]; then
[[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M emacs "$terminfo[kich1]" overwrite-mode
[[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M vicmd "$terminfo[kich1]" overwrite-mode
[[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
[[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
[[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
[[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
[[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
[[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char
# ncurses fogyatekos
[[ "$terminfo[kcuu1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
[[ "$terminfo[kcud1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
[[ "$terminfo[kcuf1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
[[ "$terminfo[kcub1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
fi
Vì vậy, nếu bạn đang kết nối với Debian hoặc hộp Ubuntu, bạn không phải làm bất cứ điều gì. Mọi thứ sẽ hoạt động tự động (nếu không, xem bên dưới).
Nhưng ... nếu bạn đang kết nối với một hộp khác (ví dụ: FreeBSD), có thể không có người dùng mặc định thân thiện zshrc
. Giải pháp là tất nhiên để thêm các dòng từ Debian/Ubuntu zshrc
vào của riêng bạn .zshrc
.
Hai
Putty gửi xterm
loại như thiết bị đầu cuối để các máy chủ từ xa. Nhưng làm hỏng một nơi nào đó và không gửi mã kiểm soát chính xác cho Trang chủ, Kết thúc, ... mà mã sẽ mong đợi từ một số xterm
. Hoặc thiết bị đầu cuối xterm
sẽ không được gửi hoặc bất kỳ thứ gì ... (Del phím hoạt động trong xterm
tuy nhiên, nếu bạn định cấu hình thiết bị trong ZSH). Cũng lưu ý rằng các phím Numpad của bạn hoạt động hài hước trong Vim ví dụ với thiết bị đầu cuối xterm
.
Giải pháp là định cấu hình Putty để gửi một loại thiết bị đầu cuối khác. Tôi đã thử xterm-color
và linux
. xterm-color
sửa số Trang chủ/Kết thúc vấn đề, nhưng Numpad vẫn hài hước. Đặt nó thành linux
đã khắc phục cả hai vấn đề.
Bạn có thể đặt loại thiết bị đầu cuối trong Putty trong Connection -> Data. Không bị cám dỗ để đặt loại thiết bị đầu cuối của bạn trong .zshrc
với export TERM=linux
, điều đó thật sai. Loại thiết bị đầu cuối phải được chỉ định bởi ứng dụng đầu cuối của bạn. Vì vậy, nếu, ví dụ, bạn kết nối từ một hộp Mac với một khách hàng Mac SSH nó có thể thiết lập loại thiết bị đầu cuối của riêng nó.
Lưu ý rằng TERM chỉ định loại thiết bị đầu cuối của bạn và không liên quan gì đến máy chủ mà bạn đang kết nối. Tôi có thể đặt loại thiết bị đầu cuối của mình thành linux
trong Putty và kết nối với máy chủ FreeBSD mà không gặp sự cố nào.
Vì vậy, sửa chữa cả những điều này và bạn nên sử dụng tốt :)
Cám ơn các ràng buộc trên. Làm việc ngay bây giờ cho tôi trong SecurtCRT – MikeRoger