如何在新选项卡中打开当前目录?

如何在新选项卡中打开当前目录?

我的环境

  • macOS 上的 Terminal.app 2.9.4
  • zsh 5.7.1

当我使用 bash 时,终端可以在新选项卡中打开当前目录,但自从我更改为 zsh 后,它就无法做到这一点。

在应用程序设置中,即使它设置为“同一工作目录”。

在此输入图像描述

.zshrc如果我在或上写点东西.zprofile,它能做到吗?

答案1

在这里找到了解决方案:https://blog.callstack.io/supercharge-your-terminal-with-zsh-8b369d689770

# Open new tabs in same directory
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
  function chpwd {
    printf '\e]7;%s\a' "file://$HOSTNAME${PWD// /%20}"
  }
  chpwd
fi

请注意,它在路径上执行的唯一百分比编码是将空格替换为“%20”。这应该被替换为更强大的编码。

答案2

点击蓝色文字:

带有弹出窗口的终端首选项窗口显示如何通知终端当前工作目录

因此,您只需将这个小转义序列添加到提示符中,以便终端知道您所在的位置。简单的!

或者,如果您认为这有点神秘,让我们看看 bash 是如何实现这一目标的。检查man bash显示,当 bash 作为交互式登录 shell 调用时(这应该是打开终端窗口或选项卡时的默认设置),它引用的文件之一是/etc/profile.

快速浏览一下/etc/profile就会发现它可能会加载/etc/bashrc

往里面看/etc/bashrc显示它正在尝试加载/etc/bashrc_$TERM_PROGRAM.快速检查:

> echo $TERM_PROGRAM
Apple_Terminal

稍后less /etc/bashrc_Apple_Terminal,还有大奖!就在顶部附近:

# Tell the terminal about the current working directory at each prompt.

接下来是一个执行此操作的函数,可以包含在(bash)提示符中。我将避免在这里复制该函数,因为我不完全确定这样做的合法性,尽管我将包含该函数的最后一行,因为我相信这足够简单,可以合理使用:

printf '\e]7;%s\a' "file://$HOSTNAME$url_path"

这基本上就是首选项窗口弹出窗口中神秘的转义序列。该函数的其余部分完全是关于$url_path使用必要的percent_encoding设置变量。您需要将这些内容转换为 zsh,或者只是将其提取到外部 bash 脚本并调用它,尽管每次启动 bash 实例可能会稍微减慢您的提示速度。

答案3

只需执行以下键盘快捷键即可:

cmd + ctrl + o

相关内容