我最近从 Ubuntu 18.04 升级到了 Ubuntu 20.04,在使用、、Vim 和 ncurses 应用程序时遇到了一个奇怪的问题byobu
:tmux
不起作用Enter,我需要改用CTRL+ M。
例如,如果我在 Gnome 终端的 Byobu(或 Tmux)窗口内使用 Vim 编辑文件,输入Enter不会插入换行符,但会插入带有M
字符的新行。要插入新行,我需要输入CTRL+ M。因此,要退出 Vim,我需要输入ESC :q
CTRL+ M。
这种情况也会发生在 ncurses 应用程序中,例如:我需要使用+ncdu
而不是。EnterCTRLM
更改TERM
环境变量似乎有帮助,但不是 100%。我得到的默认值byobu
是tmux
,TERM=screeen-256color
但如果我将其更改为 ,TERM=xterm-256color
Vim 中一切似乎都运行正常,但 不是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 软件包是最新的。