我习惯在 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-B
和1
。
你可能还想看看这个话题—— 虽然没有使用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/