我正在寻找如何修改我的 tmux 配置以便默认启用“超链接”功能。
动机
我正在尝试使我的 tmux 配置与超链接一起工作。我在 Ubuntu 24.04 上运行,在默认终端中我可以运行:
python3 -c "if 1:
import rich
import pathlib
dpath = pathlib.Path('~').expanduser()
rich.print(f'[link={dpath}]{dpath}[/link]')
"
(以上需要 Python3 和pip install rich
)
这将打印一个链接,我可以按住 Control 键并单击该链接以打开指向该目录的 Nautilus 窗口。但是,默认情况下,如果我打开 tmux 会话并键入相同的命令,它将以漂亮的颜色打印,但不能通过 Control 键单击。
我对此主题进行了一些搜索并找到了一个线索:
据称在 3.4 版本中添加了超链接支持,我正在使用的就是这个版本。
部分解决方案
经过一番搜索,我发现我运行的版本确实支持超链接,但默认情况下似乎没有启用。不过,我找到了一种启用它的方法。如果我使用以下命令启动 tmux 会话:
tmux -T hyperlinks
运行上述代码,它会打印一个我可以点击的链接!此外,还有一个很好的测试来查看该功能是否已启用。如果我运行:
tmux display -p "#{client_termfeatures}"
如果该功能处于活动状态,逗号分隔的字符串将包含“超链接”。太棒了,这表明该功能存在并且可以工作。现在我需要在我的配置中启用它,但这给我带来了比我预期更多的麻烦。
问题
接下来我想做的是默认启用此功能,而无需-T
在命令行上指定选项。我可以使用别名来做到这一点,但我宁愿在 tmux 配置中设置它,这似乎是一种更简洁的方法。但是,我很难让它工作。
我在tmux 的常见问题解答中搜索了一下,其中给出了向终端功能添加一些内容的示例:
set -as terminal-features ",gnome*:RGB"
所以我尝试做的第一件事就是添加链接
set -as terminal-features "hyperlinks"
但是,当我开始新会话并尝试tmux display -p "#{client_termfeatures}"
或尝试使用 rich 打印超链接时,它不起作用。我尝试运行tmux source ~/.tmux.conf
以确保配置已重新加载,并且还尝试使用手动运行命令ctrl+b :<command>
。我还尝试了带有-g
标志的变体,但这些都没有让我得到有效的超链接。
主要问题:
如何正确地将“超链接”添加到我的 ~/.tmux.conf 文件中的终端功能数组?
在 tmux 中的 shell 中调用
就我而言,上述命令打印:
第一个条目意味着,如果我的
$TERM
启动 tmux客户端时匹配xterm*
(例如) ,xterm-256color
那么在 tmux 内部,该命令将打印一个以逗号分隔的字符串,tmux display -p "#{client_termfeatures}"
其中包含(但不一定限于)条目、、和。clipboard
ccolour
cstyle
focus
title
如果我想添加
hyperlinks
到这个数组,我需要调用然后我必须分离客户端(prefixD,prefix默认情况下为Ctrl+ B)并重新附加(
tmux a
)。然后tmux display -p "#{client_termfeatures}"
将包括hyperlinks
。~/.tmux.conf
该行将包括:实际上,这种方法无法为我提供超链接支持,因为我没有 tmux 的设置无论如何都不支持超链接。我知道你已经解决了这个问题,所以这个方法应该对你有用。但你需要调整行以适应
$TERM
你的tmux 客户端。例如,如果你的$TERM
外部 tmux 是,gnome-256color
那么使用gnome*
而不是xterm*
。您甚至可以使用
*
而不是xterm*
来使 tmux为客户端看到的hyperlinks
任何值启用。这就像无条件使用一样。我不确定如果在 tmux 客户端的终端不支持该功能时在 tmux 中启用该功能会发生什么问题。以仅在真正支持超链接时启用的方式进行设置似乎更简洁。$TERM
-T hyperlinks
hyperlinks