当我从 Tmux 运行 Emacs 时,Home
和End
键不起作用(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
Home是ESC [ 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
告诉它期望值)。xterm
TERM=xterm
我不确定你遇到了什么颜色问题,导致你尝试切换到TERM=xterm
内部tmux但是你应该尝试确保在 TERM 值“内部”和“外部”中引用支持颜色的 terminfo 条目tmux:例如,配置您的终端仿真器以将 TERM 设置为xterm-color
、xterm-16color
、xterm-88color
或xterm-256color
根据需要;并set-option -g default-terminal screen-256color
在您的tmux配置(或screen-16color
)。