无法在 Byobu 和 Tmux 下的 Vim 和 ncurses 应用程序中发送 ENTER 键

无法在 Byobu 和 Tmux 下的 Vim 和 ncurses 应用程序中发送 ENTER 键

我最近从 Ubuntu 18.04 升级到了 Ubuntu 20.04,在使用、、Vim 和 ncurses 应用程序时遇到了一个奇怪的问题byobutmux不起作用Enter,我需要改用CTRL+ M

例如,如果我在 Gnome 终端的 Byobu(或 Tmux)窗口内使用 Vim 编辑文件,输入Enter不会插入换行符,但会插入带有M字符的新行。要插入新行,我需要输入CTRL+ M。因此,要退出 Vim,我需要输入ESC :q CTRL+ M

这种情况也会发生在 ncurses 应用程序中,例如:我需要使用+ncdu而不是。EnterCTRLM

更改TERM环境变量似乎有帮助,但不是 100%。我得到的默认值byobutmuxTERM=screeen-256color但如果我将其更改为 ,TERM=xterm-256colorVim 中一切似乎都运行正常,但 不是ncdu

除此之外,Enter当我使用它来更改 Byobu 配置时,键不起作用F9- 正如我上面所说,我需要使用CTRL+M来选择配置中的项目。

~/.tmux.conf我也尝试在和中添加以下行~/.byobu/.tmux.conf,但它只对 Vim 有帮助:

set -g default-terminal "xterm-256color"

问题xterm也发生了。

我该如何解决这个问题?

更新

我以新用户身份再次尝试,遇到了同样的问题,所以我猜测这可能是与系统有关的问题。

更新 2

摆弄了一下,xev我发现这台笔记本电脑的键盘有些奇怪——虽然我在意大利,但它是 ANSI 键盘(意大利标准键盘布局是 ISO),而且 Enter 按钮发送错误的键码。

当我按下Enter按钮时,它发送了一个键码 104,KP_Enter而不是通常的键码 36,。Return所以这是一个硬件问题,可能与 Ubuntu 本身无关。不知道为什么我之前没有意识到这一点。

答案1

经过一番摸索,xev我发现Enter这个键盘上的按钮发送了错误的键码。我在这里分享我的发现以及解决方法,希望对其他人有用。

当我按下Enter此键盘上的按钮时,它会发送键码 104,KP_Enter而不是通常的键码 36 Return,:

$ xev
...
KeyPress event, serial 47, synthetic NO, window 0x3c00001,
    root 0x7a5, subw 0x0, time 5065933, (762,538), root:(934,702),
    state 0x0, keycode 104 (keysym 0xff8d, KP_Enter), same_screen YES,
"   XLookupString gives 1 bytes: (0d) "
"   XmbLookupString gives 1 bytes: (0d) "
    XFilterEvent returns: False
...

所以这是一个硬件“问题”,Return因为KP_Enter 不一样不要总是给出相同的结果

因此,为了解决这个问题,我需要将键码 104 重新映射到Return。可以xmodmap像这样使用:

$ xmodmap -e "keycode 104 = Return NoSymbol Return"

为了使更改永久生效,可以在每次登录时运行此命令,将其添加到“启动应用程序”, 像这样:

在此处输入图片描述

答案2

这很奇怪。它在 tmux 之外工作,对吗?

如果您在没有配置的情况下运行 tmux,这种情况是否还会发生?启动一个新的 tmux tmux -Ltest -f/dev/null new,看看问题是否也存在。如果不存在,则需要查看您的配置并查看导致问题的原因。

我能想到的唯一其他方法是检查您的终端是否确实发送了 Cm 来表示 Enter(您可以运行cat然后按下该键并查看发送的内容),或者与 terminfo 条目中的功能有关kent。但它们测试起来很麻烦,而且为什么它们在 Ubuntu 上会出错,而且只是对您而言呢?也许可以尝试确保您的 ncurses 软件包是最新的。

相关内容