当前位置:  开发笔记 > 前端 > 正文

zsh中的Home/End键不适用于putty

如何解决《zsh中的Home/End键不适用于putty》经验,为你挑选了3个好方法。

我正在运行zsh作为Ubuntu盒子上的默认shell,并且使用gnome-terminal(据我所知模仿xterm)一切正常.当我通过ssh和putty(也模仿xterm)从Windows框登录时,主/端密钥不再有效.

我已经能够解决将这些行添加到我的zshrc文件...

bindkey '\e[1~' beginning-of-line
bindkey '\e[4~' end-of-line

......但我仍然想知道这里有什么问题.任何的想法?



1> hopla..:

我发现它是一个组合:

zsh的开发商并不认为ZSH应该定义的行为Home,End,Del,...键.

Debian和Ubuntu通过定义普通用户在全局/etc/zsh/zshrc文件中期望的正常操作来解决此问题.遵循相关代码(在Debian和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

因此,如果您连接到Debian或Ubuntu框,则无需执行任何操作.一切都应该自动工作(如果没有,见下文).

但是......如果你要连接到另一个盒子(例如FreeBSD),可能没有用户友好的默认值zshrc.解决方案当然是将Debian/Ubuntu中的行添加zshrc到您自己的行中.zshrc.

Putty xterm作为终端类型发送到远程主机.但地方弄乱了,不发送正确的控制代码Home,End...这人会期望从一个xterm.或者xterm终端不会发送那些或其他任何东西......(如果你在ZSH中配置它,Del密钥确实可以工作xterm).另请注意,您的Numpad-keys在Vim中表现得很有趣,例如xterm终端.

解决方案是将Putty配置为发送另一种终端类型.我试过xterm-colorlinux.xterm-color修复Home/ End问题,但Numpad仍然很有趣.设置它来linux解决这两个问题.

您可以在连接 - >数据下的Putty中设置终端类型.不要试图将你的终端类型设置为你.zshrcexport TERM=linux,这是错误的.终端类型应由终端应用程序指定.因此,例如,如果您从Mac机箱与Mac SSH客户端连接,它可以设置它自己的终端类型.

请注意,TERM指定了您的终端类型,与您要连接的主机无关.我可以将我的终端类型设置为linuxPutty并连接到FreeBSD服务器而不会出现问题.

所以,修复这两件事你应该没事:)


另一个可以修复有趣的键盘行为:打开会话设置,转到"终端 - >功能"并选中标有"禁用应用程序键盘模式"的复选框.见这里:http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-appkeypad

2> Adam Pierce..:

在PuTTY配置对话框中,转到Connection - > Data并在连接之前键入linux到Terminal-type字符串.



3> Rene..:

这对我有用

bindkey -v

bindkey '\eOH'  beginning-of-line
bindkey '\eOF'  end-of-line

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有