Home键在终端不起作用

bal*_*lki 15 command-line keyboard-shortcuts zsh gnome-terminal

我正在使用 GNOME 终端 2.7.3 和 zsh 4.3.9 (x86_64-unknown-linux-gnu)

Home并且End不工作。当我按下它们时,什么也没有发生,也没有任何显示。但是当我按下shift + Home(滚动到 shell 输出的开头。)时它们可以工作,并且也可以在其他 GUI 程序中工作。我用谷歌搜索并尝试了以下内容。没变 :(

  885  bindkey "\e[1~" beginning-of-line
  886  bindkey "\e[H" beginning-of-line
  887  bindkey "\e1~" beginning-of-line
  888  bindkey "\eH" beginning-of-line
  889  bindkey "\e[0H" beginning-of-line
Run Code Online (Sandbox Code Playgroud)

PS:当我在最后一个选项卡中按下时,Ctrl + pagedown我会;5~在屏幕上打印出来。这是否提供任何线索?

Gil*_*il' 9

功能键和光标键发送的转义序列由转义字符和可打印字符组成。按Ctrl+V然后Home。这将从字面上插入转义序列。然后bindkey向您的~/.zshrc.

指令很可能是(注意O,不是0):

bindkey '\e[OH' beginning-of-line
bindkey '\e[OF' end-of-line
Run Code Online (Sandbox Code Playgroud)


小智 7

添加这些行/etc/zshrc,然后执行source /etc/zshrc(取自此处)

bindkey '\e[1~'   beginning-of-line  # Linux console
bindkey '\e[H'    beginning-of-line  # xterm
bindkey '\eOH'    beginning-of-line  # gnome-terminal
bindkey '\e[2~'   overwrite-mode     # Linux console, xterm, gnome-terminal
bindkey '\e[3~'   delete-char        # Linux console, xterm, gnome-terminal
bindkey '\e[4~'   end-of-line        # Linux console
bindkey '\e[F'    end-of-line        # xterm
bindkey '\eOF'    end-of-line        # gnome-terminal
Run Code Online (Sandbox Code Playgroud)


小智 6

我发现我必须按CTRL-v,放手,然后按HomeorEnd键才能分别获得序列^[[H和^[[FforHome和End。将以下行添加到.zshrc文件中为我解决了这个问题:

bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line
Run Code Online (Sandbox Code Playgroud)


小智 6

我现在在 Fedora 上,但我建议您仔细阅读 Archlinux 的 wiki ,所有内容:Home 和 End 键不起作用。

我做了什么来修复它:

  1. 按 Ctrl-V Home,打印 Home 键的转义序列。它不是 \e[4~,\e[1~正如我所期望的那样/etc/inputrc。这是[H和[F

  2. 提取终端信息 infocmp $TERM >terminfo.src

  3. 打开文件进行编辑,例如vim terminfo.src,寻找khome和kend它分配给的东西,比方说khome=\E[1~和kend=\E[4~它是不是在这种情况下工作。删除它并用您在第 1 步中找到的序列替换它,所以对我来说,编辑后它是:khome=\E[H和kend=\E[F.

  4. 如果您想安全播放,请确保[F和[H(或您刚刚使用的任何序列)没有分配给其他东西,否则事情会被搞砸!

  5. 运行tic terminfo.src它创建~/.terminfo目录。

  6. 在.zshrc任何和所有其他命令之前,放置:export TERMINFO=~/.terminfo

打开一个新的终端窗口,你应该没问题,home 和 end 现在必须工作。

PS:bindkey 方法理论上应该可以工作并且更容易,但对我来说却不是。


Tho*_*n93 6

这个答案很好地解释了我的问题并解决了它。

/sf/answers/48052091/

TL;DR:将 PuTTY 终端类型从默认更改xterm为linux.

也许有人也可以使用它。