我如何将HOME键绑定为tmux前缀?

sec*_*net 6 tmux

有没有办法在〜/ .tmux.conf中执行此操作?

Chr*_*sen 14

如果其他所有内容都配置正确,那么它应该像放入以下内容一样简单.tmux.conf:

set-option -g prefix Home
Run Code Online (Sandbox Code Playgroud)

注意:除非您手动"获取"您.tmux.conf的文件,否则只有在重新启动tmux 服务器时才会对文件进行更改.要么干净地退出所有窗格,窗口(从而关闭所有会话并让服务器退出),要么使用tmux kill-server,然后开始一个全新的会话.

这仅适用于终端仿真器发送转义序列,该转义序列与khometerminfo数据库条目的字段匹配,以便在TERM连接到tmux会话时生效的值(即TERM" tmux外部" ).

生成的家庭逃逸序列

您可以验证通过键入Home键(和换行符)到你的终端模拟器发送转义序列cat -v(可以中止Control- C一旦它表明你的序列).常见的回答可能是^[[1~^[OH.

家庭的预期逃脱序列

TERM环境变量告诉terminfo的基础课程(如TMUX)什么转义序列终端仿真器(据说)理解和生成.Home键生成的转义序列存储在khome字段中.您可以使用tputinfocmp来提取字段的值(两者都使用当前值,TERM除非它们被赋予覆盖的终端声明).

tput khome | cat -v ; echo
infocmp -1 | grep -F khome
Run Code Online (Sandbox Code Playgroud)

修复生成/预期的不匹配

如果终端仿真器生成的转义序列与khome声明TERM值的条目不匹配,则可以通过以下几种方法尝试解决问题:

  1. 重新配置终端仿真程序.
    这可能涉及使用不同的程序,选择不同的仿真,或者仅仅(重新)定义按Home键时发送的序列.
  2. 选择一个TERM与终端仿真器发送和理解的内容更匹配的新值.
  3. 调整terminfo数据库条目以匹配您的终端仿真.
    您可以使用infocmp提取现有的terminfo条目和tic来编译修改后的条目.
  4. 告诉tmux调整terminfo数据库条目的运行时副本.
    tmux提供了terminal-overrides可用于覆盖各个TERM值的各个terminfo字段的选项.

例如,如果您的终端仿真器没有为Home发送序列,但您可以配置一个序列,并且您的terminfo条目TERM没有khome字段,那么您可以告诉您的终端仿真器发送ESC [ 1 ~,并使用termname:khome=\033[1~您的terminal-overrides值(哪个termname是适合您的TERM值的模式).

例如在.tmux.conf中:

set-option -g terminal-overrides "xterm-color:khome=\033[1~"
Run Code Online (Sandbox Code Playgroud)

您可以使用它tmux server-info来检查tmux的terminfo条目的运行时副本.

注意:如上所述(通过prefix更改),让此更改生效的最简单方法是重新启动tmux服务器.