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


41

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

你会怎么做?

我使用Mac OS和Zsh。

Answers:


62

使用Oh-My-Zsh并在〜/ .zshrc中添加“ osx”插件,如下所示:

plugins=(osx)

如果您使用OSX的Terminal App,则还需要添加terminalapp插件:credit

plugins=(osx terminalapp)

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

首选项>配置文件>默认>常规>工作目录>重用上一个会话的目录选项

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

这就是您需要做的!


1
在iTerm中也可以吗?
艾米·2012年


2
除非我在控制台中运行进程,否则这对我有用。如果我有一个进程,比如说rails正在运行,并且尝试通过command-n打开一个新窗口,那么我最终回到我的主目录。
YWCA你好

@YWCAHello您是否找到解决此问题的方法?
米哈尔Miszczyszyn

@Miszy我搬回了Vanilla Bash:/
YWCA你好,

23

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

precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}

也可以使用PS1(对于Bash,来自此Wiki):

export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "

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

更多信息:


另外,我认为oh-my-zsh默认情况下具有此功能。我已经使用了一个星期左右,它几乎可以立即使用。
蒂姆(Tim)

从Mac OS X Lion 10.7开始,终端将使用标题栏中的“代理”图标显示工作目录,并具有在同一目录中创建新终端的选项,并支持恢复终端。为了方便起见,终端将查看窗口/选项卡标题的内容,以查看它们是否包含有效的路径名。但是,/etc/bashrc您会看到它还支持新的转义代码,用于使用file:URL 通知Terminal工作目录,该URL可以通过百分比编码处理所有有效的路径名(窗口/标签标题只能包含ASCII字符的子集)。
克里斯·佩奇

2
设置工作目录的转义序列与设置标题的基本代码相同(操作系统命令(OSC)),代码为7而不是0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Page

3
为什么要使用precmd和preexec?为什么不只是chpwd () {print -Pn "\e]2; %~/ \a"}呢?
尼克

1
我了解这是如何更新标题栏的,但我不了解这如何导致新选项卡在与上一个选项卡相同的目录中打开。
mareoraft

3

这是一个非常简单的版本,我在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)"

这很酷,但是需要您实际在选项卡中执行命令才能更新。在极少数情况下,这可能会导致意外行为。也许我们可以使用另一种功能,当您切换选项卡而不是运行命令时会触发该功能?
mareoraft

1

gdirs似乎是一种几乎可以做到这一点的方法:新建选项卡,然后选择gdirs选择深层目录,瞧。我的第一个想法是使目录堆栈在所有选项卡之间共享,并在新选项卡之后执行cd〜1,但是我找不到如何执行此操作的方法,因为zsh的每个实例似乎都保留了自己的位置。历史记录共享通过一个公共文件进行,因此也许也可以在此处完成...


0

这就是您在bash中的操作方式。

这个shell脚本将告诉Terminal.app(从字面意义上来说很安静)打开一个新选项卡,然后切换到当前目录:

#!/bin/bash
osascript -e 'tell application "Terminal"' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e "do script with command \"cd `pwd`;clear\" in selected tab of the front window" \
-e 'end tell' &> /dev/null

…将上面的shell脚本放在您的目录$PATH(即/ usr / local / bin)中,并确保其可执行文件:

$ chmod +x /usr/local/bin/nt

来源


请注意,从Mac OS X Lion 10.7开始,默认情况下,终端将在与上一个选项卡相同的工作目录中启动新选项卡。因此,您只需要立即安排创建选项卡。(如果使用的是bash。如果使用的是其他shell,请查看/ etc / bashrc中的代码以了解如何向Terminal告知当前的工作目录。)
Chris Page

0

如果您需要立即打开此新选项卡,而无需更改配置文件或安装新插件,请运行以下命令:

pwd | pbcopy

然后手动(使用⌘T)打开一个新的终端选项卡,并在新选项卡中:

cd "`pbpaste`"

警告:这将覆盖系统剪贴板的内容。


另一种较长的方法,不会覆盖剪贴板:

pwd > $TMPDIR/wd

打开新标签。

cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd

0

根据上面Pie Pieter的评论,一旦plugins=(git osx)安装了插件,您只需键入tab,它将在当前目录中打开一个新选项卡。


0

如果要在打开新选项卡时自动更改目录,请使用dirpersist插件。

osx插件仅保存最后一个目录,但您必须运行命令tab以打开一个新选项卡,但这并不总是可能的(例如,如果您正在当前选项卡中运行某些内容)。


0

将terminalapp添加到.zshrc对我不起作用,所以我寻找了插件~/.oh-my-zsh/plugins/terminalapp,它告诉我:

# This file is intentionally empty.
#
# The terminalapp plugin is deprecated and may be removed in a future release.
# Its functionality has been folded in to the core lib/termsupport.zsh, which
# is loaded for all users. You can remove terminalapp from your $plugins list
# once all your systems are updated to the current version of Oh My Zsh.

0

新标签页已在同一文件夹(Cmd + T)中打开。对于新窗口(Cmd + N),Pieter的解决方案是正确的:

首选项>配置文件>默认>常规>工作目录>重用上一个会话的目录选项

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.