目前,在我的tmux.conf中,我有以下绑定,它允许我在创建新窗口时命名窗口。然后,该窗口在我在最后一个窗口中打开的目录中打开:
# 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存储到当前路径中。
发布于 2022-07-15 10:21:42
一个问题是,只替换模板中的第一个%%。另一种情况是,当返回到父shell时,在子shell中执行的cd命令将丢失。对于bash,您可以尝试这样的绑定:
bind-key c command-prompt -p "window name:" \
"new-window -c '#{pane_current_path}' 'myfn \"%%\"'"这将运行一个bash脚本myfn,该脚本必须在您的路径中才能完成这项工作。它包括:
#!/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这样做。所以使用一个绑定,如
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外壳终止所必需的。
https://stackoverflow.com/questions/72982087
复制相似问题