从 Tmux 运行时,Emacs 中的 Home 和 End 键不起作用

从 Tmux 运行时,Emacs 中的 Home 和 End 键不起作用

当我从 Tmux 运行 Emacs 时,HomeEnd键不起作用(Home键运行搜索命令,就像C-s被按下一样)。当我在文件中添加以下内容时,问题就开始了~/.bashrc

TERM="xterm"
export TERM

我曾在某处读到过不应手动设置 TERM 变量,但这是我能够解决颜色问题的唯一方法。如果没有此设置,当直接从终端运行时,Emacs 中的颜色与从 Tmux 运行时的颜色不同。此选项导致从 Tmux 运行时 Emacs 中的某些键不起作用,因此我将以下行添加到我的~/.tmux.conf

set-window-option -g xterm-keys on

这解决了除Home和之外的所有键的问题End。有什么想法可以让这些键再次工作吗?

答案1

你可以想到tmux作为一个终端仿真器,它提供一个使用screen基于协议的终端(在“内部”),并将其转换为某些其他终端协议(在“外部”),同时提供窗格、窗口、会话、状态栏等功能。

自从tmuxscreen总是在“内部”提供类似终端协议,你必须始终screen在内部使用基于 TERM 的值tmux。此外,您必须使用适当的 TERM 值“outside”,以便tmux知道如何与运行它的终端对话(通常是您的终端仿真器,因此使用您的终端仿真器配置提供的任何终端协议;通常是的变体xterm)。

具体来说,您所面临的问题是 ascreen HomeESC [ 1 ~,而它ESC O H在 中xterm

% tput -T screen khome | xxd
0000000: 1b5b 317e                                .[1~
% tput -T xterm khome | xxd
0000000: 1b4f 48                                  .OH

那么,当tmuxHome从你的终端仿真器获取一个(通过khome解码当你连接到tmux会话),它会发送screen-Home ESC [ 1 ~(因为tmux总是在“内部”使用screen协议),但程序(例如 Emacs)期望 -Home xterm(因为您通过设置ESC O H告诉它期望值)。xtermTERM=xterm


我不确定你遇到了什么颜色问题,导致你尝试切换到TERM=xterm内部tmux但是你应该尝试确保在 TERM 值“内部”和“外部”中引用支持颜色的 terminfo 条目tmux:例如,配置您的终端仿真器以将 TERM 设置为xterm-colorxterm-16colorxterm-88colorxterm-256color根据需要;并set-option -g default-terminal screen-256color在您的tmux配置(或screen-16color)。

相关内容