在~/.tmux.conf
,与
bind-key v split-window "vim"
我可以在分割窗口中启动 vim。
如何在 tmux 中使用两个键bind-key
?
示例:
bind-key vG split-window "vim +$"
答案1
你不能。tmux
只允许单键绑定(单独、使用bind-key -n
或跟在前缀键后面)。
但是,您可以尝试将“v”绑定到以下调用command-prompt
:
bind-key v command-prompt "tmux-vim.bash %%"
看起来tmux-vim.bash
像
if [ $1 = "G" ]; then
tmux split-window "vim +$"
fi
然后,输入 v 进入命令提示符后,只需输入“G”并按 Enter 即可。“G”将作为参数传递给tmux-vim.bash
,该脚本将负责执行tmux
您(最初)想要与“vG”关联的命令。
答案2
回答
只有一个正确的解决方案:
# you can use "vim +$" as well, but I don't think that +$ prefix have any sense without the file path argument...
bind -T multiKeyBindings G split-window "vim"
bind v switch-client -T multiKeyBindings
如果您希望传递自定义参数,则应使用这个:
bind -T multiKeyBindings G command-prompt 'split-window "vim %%"'
bind v switch-client -T multiKeyBindings
更多示例:
# Toggle maximizing of current pane by typing PREFIX mm
bind -T multiKeyBindings m resize-pane -Z
bind m switch-client -T multiKeyBindings
# or without PREFIX
bind -T multiKeyBindings m resize-pane -Z
bind -n m switch-client -T multiKeyBindings
# rename current window by typing PREFIX mr
bind -T multiKeyBindings r command-prompt 'rename-window %%'
bind -n m switch-client -T multiKeyBindings
值得注意的是
您应该为每个多键绑定使用唯一的按键板名称。例如:
bind -T multiKeyBinding1 G split-window "vim"
bind v switch-client -T multiKeyBinding1
bind -T multiKeyBinding2 m resize-pane -Z
bind -n m switch-client -T multiKeyBinding2
答案3
正如 @chepner 所说,你不能这样做直接地。您可以做的是绑定v
以创建一个绑定,G
该绑定可执行您想要的操作,然后自行解除绑定。
bind-key v bind-key -n G split-window "vim +$" \\; unbind -n G
采用这种方法时,有几点重要的事情需要注意:
- 这将与现有的顶级绑定相冲突(在本例中
G
);如果您想要将某个东西绑定到G
并且将其他东西绑定到 ,vG
则解除绑定步骤需要恢复原始绑定。 tmux
.tmux.conf
如果包含的bind-key
语句太长,将会导致段错误。如果这成为一个问题,您可以通过将上下文切换放在 bash 脚本中,然后绑定一个键来运行这些脚本来解决它。
有关更复杂的示例,请参阅这个要点。
答案4
除了command-prompt
其他答案建议的方法之外,您还可以使用不同的前缀来获得第二组映射:
prefix key
Set the key accepted as a prefix key.
prefix2 key
Set a secondary key accepted as a prefix key.
因此您可以执行以下操作:
set -g prefix C-v
bind-key G split-window "vim +$"
映射到c-v g
而不是c-b vG
。缺点是它将遮蔽任何默认映射,因为它也将通过 访问c-b g
。