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


21

我已经习惯了OS X上的iTerm2(或者这个案例的Terminal.app)。但我想转移到使用tmux(或屏幕,但问题类似于两个应用程序)。

所以我的想法是让一个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选项卡。

谢谢


Answers:


8

要调用的按键动作(第一序列Ctrl-b,然后Ñ范围从0到9)。

您最好的选择是使用键盘快捷工具(如ButlerKeyboard Maestro)为您执行此操作。


使用巴特勒

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


使用Keyboard Maestro

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

添加一个由Hot Key TriggerCmd-1)触发的新项目,并为其操作添加两个击键Ctrl-B1


您可能还想看看这个主题 - 虽然不使用,Command但对我使用终端无效。


tmux文档

将键键绑定到命令。可以为ctrl键指定带有'C-'或'前缀的键,或者为alt(元)键指定'M-'。-r标志表示此键可能重复,请参阅repeat-time选项。

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


omg什么是一个很棒的黑客!它也有效!使用了键盘大师,因为巴特勒似乎有点矫枉过正。谢谢!
rubenfonseca 2011年

键盘Maestro非常适合这一点
Sam Selikoff

19

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

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


这绝对是使用iTerm2的人的最佳答案。谢谢!
newUserNameHere

1
出于某种原因,这不适用于我的iTerm2 build 3.0.2
jasonszhao 2016年

如果这不起作用,可能是因为iTerm2默认情况下将cmd键绑定到switch-tab。你的修饰语可能会发生冲突。我不得不将swith tab键更改为选项以使其在CMD + n上运行
Surfrdan

2

可以使用Terminal.app进行特殊快捷方式。我刚才发现了,但这可能是在狮子之前发生的。

进入“首选项”>“设置”,然后单击“键盘”选项卡。现在,您需要通过单击框下方的加号图标添加新的键盘快捷键。现在,您要设置“将字符串发送到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中复制此功能。


1

您可能还想考虑iTerm2与tmux提供的本机(但非常实验性)集成:http//code.google.com/p/iterm2/wiki/TmuxIntegration

这样,当您按Cmd-D分割屏幕时,iTerm2将为您分割标签。这很棒,因为分割是原生的,因此您可以在中间拖动边缘以重新调整宽度,或者您可以通过单击选择窗格。同样适用于新标签/窗口(但快捷方式略有不同 - 否则您无法添加非标签选项卡)。

和tmux一样,如果你分离并重新连接,一切都会为你保存。

但有两个警告:*这是一个非常实验性的功能,对我来说非常不稳定。*您必须自己构建tmux(使用上面链接上的某个存档)。

-克里斯


我知道这已经有两年了,但是不知道这是否仍然有效?我按照你的链接说明,但cmd+D拆分iTerm2的窗格,而不是tmux。
Sam Selikoff 2014年

1
@SamSelikoff你必须开始tmux -CC
jasonszhao 2016年

0

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


2
网页消失并一直移动。请至少总结博客文章的内容,并提供其标题和作者的详细信息,以便在链接中断时您的答案不会变得毫无价值。
David Richerby 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.