将 tmux 键绑定移动/重新绑定到不同的键而不拼写出来

将 tmux 键绑定移动/重新绑定到不同的键而不拼写出来

tmux 中有许多默认的键绑定,可以创建各种类型的菜单。显然,这些键绑定打开了它们显示的整个菜单的代码:

bind-key    -T prefix       <                      display-menu -T "#[align=centre]#{window_index}:#{window_name}" -x W -y W "#{?#{>:#{session_windows},1},,-}Swap Left" l { swap-window -t :-1 } "#{?#{>:#{session_windows},1},,-}Swap Right" r { swap-window -t :+1 } "#{?pane_marked_set,,-}Swap Marked" s { swap-window } '' Kill X { kill-window } Respawn R { respawn-window -k } "#{?pane_marked,Unmark,Mark}" m { select-pane -m } Rename n { command-prompt -F -I "#W" { rename-window -t "#{window_id}" "%%" } } '' "New After" w { new-window -a } "New At End" W { new-window }

我发现它们非常有用,但我想将其中一些移动到不同的键(例如,我想将<和移动>[])。然而,将整个菜单定义复制到我的配置中似乎不是最理想的,因为我永远不会注意到它是否在上游发生变化。


有什么方法可以将现有的 tmux 键绑定“移动”到不同的键上,而无需在我的 中重复其定义.tmux.conf

答案1

tmux list-keys确实(或至少应该)生成可以在.tmux.conf您选择来源的任何文件内部或内部重用的输出(例如使用source-file)。

这个想法是从 获取输出tmux list-keys -T prefix "<",将其传递sed<[最后将其提供给tmux source-file -(其中-将被解释为“从标准输入读取”)。在 shell 中,您可以使用以下命令执行此操作:

tmux list-keys -T prefix "<" | sed "1 s/</[/" | tmux source-file -

.tmux.conf仍然需要一个 shell 来设置管道,因此使用run-shell

run-shell 'tmux list-keys -T prefix "<" | sed "1 s/</[/" | tmux source-file -'

注意sed "1 s/</[/"更改<第一行的第一行,在本例中是正确的。但如果 key 是i,则应该使用 likesed "1 s/ i / [ /"来避免匹配iin bind-key。或者,在某些情况下,您可能需要搜索并替换整个-T prefix …短语。另请记住,某些字符在正则表达式中是特殊的。无论如何,如果您设法编写sed命令来执行您想要的更改,那么该方法应该有效。

相关内容