如何让ZSH在终端框架中显示当前目录?

4

我正在逐渐从Bash转换到ZSH,并尝试通过复制功能来学习。但似乎找不到这个功能。

我认为Bash默认会执行此操作

我应该放什么,放在哪里?这是否可能?谢谢。


这可能是由于bash下的shell提示符设置 -- 在bash下,您从echo $PS1获得什么输出? - sarnold
据我所知,终端就是这样做的。我的 $PS1 只是设置为无限符号 ∞。 - Kevin Suttle
zsh 提供了一个 chpwd_functions 数组,它比使用基于 PS1precmd 的转义序列要好得多。我希望 PS1 可以有设置窗口标题的 Terminal.app 转义序列。也许在 PROMPT_COMMAND 中可以找到? - sarnold
我真的一点头绪都没有。这对我来说都是全新的。我正在查看 https://github.com/holman/dotfiles/tree/master/zsh,想知道 prompt.zsh 是否是需要进行操作的地方。我之前提供的链接也是错误的。误报了。 - Kevin Suttle
2个回答

10

试试这个:

settitle() { printf "\e]0;$@\a" }
dir_in_title() { settitle $PWD }
chpwd_functions=(dir_in_title)

现在,您的cd命令将运行dir_in_title函数,该函数将打印一个转义序列,要求Terminal.app更新标题。(奇怪的是,使用的转义序列也适用于urxvt,至少如此。这些必须比我预期的更加规范。)
如果您喜欢这个效果,您需要将这些行添加到您的~/.zshrc中,以便它在未来终端中起作用。
我从Chris Page在superuser上的回答中获得了正确的转义序列,并从我的类似但不同的问题的答案中获得了函数的风格。Chris Page在那个问题中给出了自己的答案,其中包含有关OS X 10.7的详细信息,这些信息大相径庭。当您升级时,您可能需要使用他的机制。

0

我定义了此函数。需要一些Python知识并且有点啰嗦,但我知道在那里发生了什么。

如果不查Google,我不知道为什么sarnold的printf "\e]0;$@\a"可以按预期工作。

function current_directory()
{
    echo $(python3 -c "from pathlib import Path; print(Path('.').absolute().name)")
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接