如何让 F1-F4 键在 tmux 中正常运行

如何让 F1-F4 键在 tmux 中正常运行

在我的普通终端中,F1-F4键会产生^[[11~^[[12~^[[13~^[[14~,但在 tmux 中我得到的是^[OP^[OQ^[OR^[OS。我希望它们在 tmux 中的行为相同,这样我就不必在 tmux 中为程序绑定而烦恼。我没有 PuTTYXterm R6选项打开。

我使用putty-256colorputty 和 tmux 中的终端类型来避免其他键不匹配,但我仍然需要重新映射我的箭头键。

配置曾是:

set -g default-terminal "putty-256color"
set -g terminal-overrides "putty*:smkx@:rmkx@:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~"

我的配置的其余部分是不相关的装饰性内容。您可以看到我尝试将 4 个功能键重新映射回原来的状态,但还没有成功。

我觉得我错过了一些基本的东西,为什么我的钥匙不能保持不变每一个tmux 内部和外部的密钥,除了字首那么这些问题就不会出现吗?

编辑
我的问题仍然存在,但我曾是缺少一些基本的东西:default-terminal指的是终端类型之内tmux 但terminal-overrides指的是我正在连接的术语类型,即外部tmux 的。 (是的,我觉得自己很蠢。)

我的配置现在是这样的:

set -g default-terminal "screen-256color"
set -g terminal-overrides "putty*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~:smkx@:rmkx@"

F1-F4仍然给我^[[11~^[[12~^[[13~^[[14~tmux 外部和^[OP^[OQ^[OR^[OS内部。

答案1

手册页不清楚,但阅读源代码有帮助:

    /*
     * 这个文件的名字有点误导人,它包含的代码
     * 关键代码并将其翻译成适合发送到的内容
     * 应用程序在窗格中运行(类似于 input.c 在其他窗格中的作用)
     * 方向与输出)。
     */

您的 shell 是注释所指的应用程序。

用于terminal-overrides修改读取的终端描述tmux,以允许您使用与终端描述不匹配的配置(外部“真实”终端):

tmux将键转换为它自己的一组转义序列(与 中的转义序列匹配screen,但它添加了选项xterm-keys)。这评论在顶部window.c总结如下:

 * A pane has two buffers attached, these are filled and emptied by the main
 * server poll loop. Output data is received from pty's in screen format,
 * translated and returned as a series of escape sequences and strings via
 * input_parse (in input.c). Input data is received as key codes and written
 * directly via input_key.

手册页

default-terminal 终端
设置在此会话中创建的新窗口的默认终端 - 默认值TERM环境变量。为了tmux正确工作,这必须被设置为'屏幕','tmux'或它们的衍生物。

限制的原因是无法按照input-keys.c您想要的方式自定义数据。

答案2

功能键的键码必须与终端定义的键码相符。

我的意思是,如果您的 F1 功能键产生 ^[[11~,则您的终端定义中必须有 kf1=\E[11~(例如 TERM=dtterm)。

如果您的 F1 功能键产生 ^[OP,则您的终端定义中必须有 kf1=\EOP(例如 TERM=vt220)。

您可以使用以下命令检查终端的按键分配信息CMP命令。

相关内容