首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在创建时使用Tmux name窗口,并在zsh命令中使用

在创建时使用Tmux name窗口,并在zsh命令中使用
EN

Stack Overflow用户
提问于 2022-07-14 14:21:35
回答 1查看 127关注 0票数 0

目前,在我的tmux.conf中,我有以下绑定,它允许我在创建新窗口时命名窗口。然后,该窗口在我在最后一个窗口中打开的目录中打开:

代码语言:javascript
运行
复制
# Name windows before you create them
bind-key c command-prompt -p "window name:" "new-window -c '#{pane_current_path}'; rename-window '%%'"

我希望实现以下目标:当我键入名称时,它将创建窗口并执行类似于z <TYPED_NAME>的bash命令--其思想是使用我键入的名称搜索最相关的目录(例如,使用z命令)并将其放入其中。这能实现吗?如果在z中没有找到相关的目录,它将使用当前行为,即将cd存储到当前路径中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-15 10:21:42

一个问题是,只替换模板中的第一个%%。另一种情况是,当返回到父shell时,在子shell中执行的cd命令将丢失。对于bash,您可以尝试这样的绑定:

代码语言:javascript
运行
复制
bind-key c command-prompt -p "window name:" \
  "new-window -c '#{pane_current_path}' 'myfn \"%%\"'"

这将运行一个bash脚本myfn,该脚本必须在您的路径中才能完成这项工作。它包括:

代码语言:javascript
运行
复制
#!/bin/bash
name=$1
tmux rename-window "$name"
cd ../"$name" || echo "failed to cd to $name" >&2
exec bash -i

记住chmod +x脚本。它调用tmux来重命名窗口,然后将z代码查找并将cd转到目录中。在本例中,我只是在../中查找它。最后一个exec确保我们用一个交互式的shell替换当前的shell。

对于zsh,您可以执行类似的操作,但是如果希望在myfn中找到fpath,则需要new-window使用-i选项运行zsh,因为zsh只对交互式shell这样做。所以使用一个绑定,如

代码语言:javascript
运行
复制
bind-key c command-prompt -p "window name:" \
   "new-window -c '#{pane_current_path}' 'exec zsh -ic \"myfn %%\"'"

在这里,我添加了一个exec,以避免有一个没有意义的父shell,而且由于-c后面必须是一个字符串,所以我将myfn%%放在相同的双引号中。如果您的名字可以包含空格等,则需要添加更多的引用。

myfn zsh脚本可以是相同的,bash可以替换为zsh。我对zsh还不太了解,无法避免最终的exec zsh -i,这是阻止zsh -ic外壳终止所必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72982087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档