Ubuntu 20.04下tmux内micro编辑器修饰键+方向键仅输出键码如何解决
问题原因
该问题是tmux与micro编辑器的终端键序列适配不匹配共同导致的,不属于单方面故障:
- tmux会对终端上报的功能键序列做二次转义,你开启的
xterm-keys配置仅覆盖了部分标准键序列,没有适配micro依赖的完整修饰键+方向键规则 - Vim、Nano等传统编辑器内置了tmux环境下的特殊键序列识别规则,而micro默认没有做对应的适配,因此无法识别tmux转发的键序列,直接将原始序列作为文本输出
解决方法
第一步:修正tmux的终端类型配置
绝大多数情况下该问题是因为tmux使用了不兼容的TERM环境变量导致的,首先在~/.tmux.conf中添加如下配置:
# 设置正确的终端类型 set -g default-terminal "tmux-256color" # 开启功能键转发 set -g xterm-keys on
修改完成后必须完全关闭所有tmux进程(执行tmux kill-server)后重新启动tmux,仅重载配置不会生效。启动后在tmux内执行echo $TERM确认输出为tmux-256color即可,90%以上的场景做完这一步就能解决问题。
第二步:手动绑定micro的键映射
如果修正终端类型后仍有问题,可以直接将你观测到的键码绑定到micro的对应操作,编辑micro的配置文件~/.config/micro/bindings.json,添加如下规则:
{ // Shift+方向键:选中文本 "[1;2D": "SelectLeft", "[1;2C": "SelectRight", "[1;2A": "SelectUp", "[1;2B": "SelectDown", // Ctrl+方向键:按单词/段落跳转 "[1;5D": "WordLeft", "[1;5C": "WordRight", "[1;5A": "ParagraphPrevious", "[1;5B": "ParagraphNext", // Ctrl+Shift+方向键:按单词/段落选中 "[1;6D": "SelectWordLeft", "[1;6C": "SelectWordRight", "[1;6A": "SelectParagraphPrevious", "[1;6B": "SelectParagraphNext", // Alt+方向键:自定义跳转操作 "[1;3D": "WordLeft", "[1;3C": "WordRight", "[1;3A": "CursorUp", "[1;3B": "CursorDown" }
如果实际观测到的按键输出和上述键码不一致,直接替换对应键值即可,保存后重启micro即可生效。
第三步:tmux侧强制转发按键(可选)
如果上述两种方法都无效,可以在~/.tmux.conf中添加如下绑定,强制tmux将修饰键+方向键直接转发给下层程序:
bind -n S-Left send-keys S-Left bind -n S-Right send-keys S-Right bind -n S-Up send-keys S-Up bind -n S-Down send-keys S-Down bind -n C-Left send-keys C-Left bind -n C-Right send-keys C-Right bind -n C-Up send-keys C-Up bind -n C-Down send-keys C-Down bind -n C-S-Left send-keys C-S-Left bind -n C-S-Right send-keys C-S-Right bind -n C-S-Up send-keys C-S-Up bind -n C-S-Down send-keys C-S-Down bind -n M-Left send-keys M-Left bind -n M-Right send-keys M-Right bind -n M-Up send-keys M-Up bind -n M-Down send-keys M-Down
修改后重启tmux即可生效。
内容的提问来源于stack exchange,提问作者Polymerase
相关产品推荐
相关产品推荐

