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 / [ /"
来避免匹配i
in bind-key
。或者,在某些情况下,您可能需要搜索并替换整个-T prefix …
短语。另请记住,某些字符在正则表达式中是特殊的。无论如何,如果您设法编写sed
命令来执行您想要的更改,那么该方法应该有效。