Tmux创建窗口时输入名称并调用z命令跳转匹配目录的实现方案
实现方案
该需求可以完全实现。
原有配置
你当前的tmux.conf配置实现了新建窗口前提示输入名称、新窗口默认继承当前窗格路径的效果,配置如下:
# Name windows before you create them bind-key c command-prompt -p "window name:" "new-window -c '#{pane_current_path}'; rename-window '%%'"
调整后配置
替换为以下配置即可满足需求:
bind-key c command-prompt -p "window name:" "new-window -c '#{pane_current_path}' 'zsh -ic \"target_path=\\$(z -e %1 2>/dev/null && pwd || echo '#{pane_current_path}'); cd \\\"\\$target_path\\\"; exec zsh\"'; rename-window '%1'"
配置逻辑说明
- 首先保留
-c '#{pane_current_path}'作为路径兜底,z匹配失败时默认进入当前窗格路径 - 新窗口启动时通过
zsh -ic进入交互zsh环境,确保能加载到.zshrc中定义的z跳转函数(z是shell函数而非独立二进制文件,非交互模式下无法直接调用) z -e %1是z工具自带的参数:仅匹配目录不执行跳转,匹配失败时返回非零退出码- 匹配成功时通过
pwd获取z匹配到的目标目录,匹配失败则直接使用兜底的当前窗格路径 - 最后通过
exec zsh启动正常交互shell,避免多嵌套一层zsh进程
适配说明
如果你使用的是zoxide(主流的z现代替代实现),只需要把配置里的z -e %1替换为zoxide query %1即可,其余逻辑不用改动。
内容的提问来源于stack exchange,提问作者Corel
相关产品推荐
相关产品推荐

