在同一目录中打开一个新选项卡

Ner*_*ian 44 terminal zsh macos

假设你在 /very/cool/and/deeply/nested/folder 。并且您想在同一文件夹中打开一个新的终端选项卡。

你会怎么做?

我使用 Mac OS 和 Zsh。

小智 66

使用Oh-My-Zsh并在您的 ~/.zshrc 中添加“osx”插件,例如:

plugins=(osx)
Run Code Online (Sandbox Code Playgroud)

如果您使用 OSX 的终端应用程序,您还需要添加terminalapp插件:信用

plugins=(osx terminalapp)
Run Code Online (Sandbox Code Playgroud)

如果您使用 iTerm,您需要设置一个配置选项(请注意,您可能不需要 zsh 插件才能使其工作):信用

Preferences > Profiles > Default > General > Working Directory > Reuse previous session's directory 选项

iTerm2 首选项面板更新以重用以前的会话目录。

这就是你需要做的!

  • 这对我有用,除非我在控制台中运行一个进程。如果我有一个进程,比如说“rails”正在运行,并且我尝试通过 command-n 打开一个新窗口,我最终会回到我的主目录。 (2认同)

Tim*_*Tim 23

Mac OS X Lion 中现在可用的另一个选项是使用内置功能。它使用“转义序列”来找出当前目录。对我来说,如果我在我的 .zshrc 中使用这些命令,它会起作用:

precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}
Run Code Online (Sandbox Code Playgroud)

也可以使用PS1(对于 Bash,来自这个 wiki):

export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
Run Code Online (Sandbox Code Playgroud)

\e]2;标题栏中打印内容的转义序列在哪里。这似乎是Terminal.app从那里获取其信息。

更多信息:

  • 为什么要使用 precmd 和 preexec?为什么不只是`chpwd () {print -Pn "\e]2; %~/ \a"}`? (3认同)
  • 设置工作目录的转义序列与设置标题的基本代码相同——操作系统命令(OSC)——代码为 7 而不是 0-2:`\e]7;file://hostname/percent-encoded -路径名\a` (2认同)

小智 5

这是一个非常简单的版本,我在 bash 中使用过,也可以在 zsh 中使用。它将当前文件夹保存在一个文件中,在每个命令之后(不会伤害太多 IMO)并在保存的当前文件夹中打开一个新终端。

将以下内容添加到.zshrc

# emulate bash PROMPT_COMMAND (only for zsh)
precmd() { eval "$PROMPT_COMMAND" }
# open new terminal in same dir
PROMPT_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"
Run Code Online (Sandbox Code Playgroud)