将 tmux 前缀绑定到 OS X cmd 键(或任何其他绑定)

将 tmux 前缀绑定到 OS X cmd 键(或任何其他绑定)

我习惯在 OS X 上使用 iTerm2(或在这种情况下为 Terminal.app)。但我想转而使用 tmux(或 screen,但这两个应用程序的问题类似)。

所以我的想法是使用一个 iTerm 选项卡,并打开一个带有多个选项卡的 tmux 会话。要进行转换,我需要在 tmux 上配置一个基本功能:使用 cmd + n 切换选项卡“n”(如 Firefox、Chrome、iTerm2 本身等)

但是我找不到在 Mac 键盘上映射 cmd 键的方法。我首先尝试将 cmd 实现为前缀键,但没有成功。我尝试设置

set-option -g prefix M-a (hoping for Meta-a)

set-option -g prefix ^a (hoping for ^ to work)

但什么都不起作用。这可能吗?我实际上不需要将前缀绑定到 cmd,但我希望能够使用 cmd+n 更改 tmux 选项卡。

谢谢

答案1

您想要调用一系列按键(首先Ctrl-b,然后n(范围从0到9)。

最好的办法是使用键盘快捷键实用程序,例如巴特勒或者键盘大师为您完成此事。


使用巴特勒

选择+ » 智能项目 » 按键,配置热键 Cmd-1. 按Ctrl-B,然后1按键。将其配置为仅在终端(或 iTerm)中有效。它会警告您其他应用程序可能不喜欢它,但您已经知道了。


使用键盘大师

在左侧创建一个仅在终端(或 iTerm)中可用的新组。

添加新项目,触发条件热键触发Cmd-1)并添加两个按键其行动:Ctrl-B1


你可能还想看看这个话题—— 虽然没有使用Command,并且对我来说使用终端也不起作用。


来自tmux 文档

将键绑定到命令。可以为 ctrl 键指定前缀为“C-”或“ˆ”的键,或为 alt (meta) 键指定前缀为“M-”的键。-r 标志表示此键可以重复,请参阅 repeat-time 选项。

它们不支持第三个修饰键。

答案2

在 iTerm2 中,您可以将快捷键映射到发送到终端的十六进制代码。转到 iTerm2 首选项 -> 键。在全局快捷键中,单击 + 并添加所需的快捷键,例如 cmd+1,它将被捕获。然后选择“发送十六进制代码”。在出现的框中,输入要发送到 tmux 的十六进制代码,并用空格分隔。Ctrl-B 是 0x02,因此对于“Ctrl-B 1”,请输入“0x02 0x31”。有关更多十六进制代码,请参阅此处:http://www.nthelp.com/ascii.htm

我将 Cmd 与 h、j、k、l 映射以在 tmux 窗格之间移动,将 Cmd 与 % 和 " 映射以创建分割。我可能会做一些类似的事情,用一个控制键在 vim 分割之间移动。

答案3

可以使用 Terminal.app 创建特殊快捷方式。我前几天才发现,但这在 Lion 之前可能已经实现。

进入“首选项”>“设置”,然后单击“键盘”选项卡。现在您需要通过单击框下方的加号图标来添加新的键盘快捷键。现在您要设置一个“将字符串发送到 shell”的组合键。

例如:假设我想将 M-LeftArrow 设置为映射到prefix-p(上一个窗口)。

Key: Left Arrow 
Modifier: Option 
Action: send string to shell

prefix-p现在只需在输入框中输入prefix你为 tmux 设置的内容(我使用 cntrl-a,因此框显示\001p)。请注意,如果你犯了一个错误,将插入删除字符而不是实际删除字符,因此请点击“删除一个字符”按钮向后移动,以防你搞砸了。

为了方便起见,我设置了特殊字符:

M-Left  > Previous Window
M-Right > Next Window
M-Up    > Enter scrolling mode
M-Down  > Next Pane

您还可以修改 cntrl-anything 和 shift-anything,但请记住,这些可能会干扰您的 $EDITOR 或其他程序,因此要小心哪些特殊功能可能会变得无用。

另请注意,我无法弄清楚如何在 iTerm2 中复制此功能。

答案4

您也可以查看这篇博客文章,其中有关于 tmux/iterm 集成的非常详细的解释: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/

相关内容