在Mac OS Finder中打开此处的终端[关闭]


682

是否有类似于Mac OS的Windows Powertoy的“此处打开命令窗口”?我已经通过Google搜索找到了几个插件,但想查看最适合那里的开发人员的插件。


Answers:


900

从Mac OS X Lion 10.7开始,终端完全包含此功能即服务。与大多数服务一样,默认情况下会禁用这些功能,因此您需要启用它才能使其显示在“服务”菜单中。

系统偏好设置>键盘>快捷方式>服务

在Folder启用New TerminalFolder处还有New Terminal Tab,它将在最前面的Terminal窗口中创建一个选项卡(如果有的话,否则它将创建一个新窗口)。这些服务不仅可以在Finder中使用,而且还可以在所有应用程序中使用,并且它们可以对文件夹以及文本中选择的绝对路径名进行操作。

您甚至可以为它们分配命令键。

服务显示在每个应用程序菜单的“服务”子菜单中,以及上下文菜单中(在文件夹或路径名上按住Control单击或右键单击)。

当您在Finder中选择文件夹时,“文件夹中新终端”服务将变为活动状态。您不能简单地打开文件夹并“就地”运行服务。返回到父文件夹,选择相关文件夹,然后通过“服务”菜单或上下文菜单激活服务。

此外,如果将文件夹(或路径名)拖动到“终端”应用程序图标上,Lion Terminal将打开一个新的终端窗口,并且您也可以拖动到现有窗口的标签栏以创建新的标签。

最后,如果将文件夹或路径名拖到选项卡上(在选项卡栏中),并且前台进程是外壳程序,它将自动执行“ cd”命令。(如在较早版本的Terminal中一样,拖入选项卡内的终端视图仅插入路径名。)

您也可以从命令行或shell脚本执行此操作:

open -a Terminal /path/to/folder

这等效于将文件夹/路径名拖到“终端”应用程序图标上的命令行。

与此相关的是,Lion Terminal还具有用于查找手册页的新服务:在Terminal中打开手册页可在新的终端窗口中显示选定的手册页主题,而在Terminal中的Search man Pages在选定的文本上执行“ apropos”。前者还理解手册页引用(“ open(2)”),手册页命令行参数(“ 2 open”)和手册页URL(“ x-man-page:// 2 / open”)。


8
不适用于优胜美地。
OlcayErtaş15年

2
@OlcayErtaş什么不起作用?我回答中的所有内容均适用于优胜美地10.10.x。
克里斯·佩奇

2
我必须重启Finer吗?我没有为什么,但是我启用了“文件夹中的新终端”服务,但是没有用。
OlcayErtaş15年

13
@OlcayErtaş,您必须右键单击文件夹图标以获取菜单项;不要导航到文件夹本身,而是导航到其父文件夹。
乔纳森·兰德鲁姆

2
我可以通过右键单击/服务来使用它,但不能通过键盘快捷键来使用它。
CanPoyrazoğlu2015年


56

我发现不可替代的应用程序是DTerm,它实际上在您的应用程序中打开了一个迷你终端。另外,它几乎可以与所有内容一起使用-Finder,XCode,PhotoShop等。


38

澄清(感谢@ vgm64):如果您已经在Terminal中,则可以在不离开Terminal的情况下快速切换到最顶部的Finder窗口。这样,您可以避免使用鼠标。

我已经添加了以下内容,.bash_profile因此可以随时输入cdffTerminal。

function ff { osascript -e 'tell application "Finder"'\
 -e "if (${1-1} <= (count Finder windows)) then"\
 -e "get POSIX path of (target of window ${1-1} as alias)"\
 -e 'else' -e 'get POSIX path of (desktop as alias)'\
 -e 'end if' -e 'end tell'; };\

function cdff { cd "`ff $@`"; };

这是来自此macosxhints.com终端提示


“ open”在当前目录中打开一个新的Finder窗口
jolvi'1

2
@jolvi与此答案提供的相反。并不是要在处打开查找器窗口pwd,而是要cd打开查找器所在的目录。
乔纳森·兰德鲁姆

啊,对不起,你当然是对的。
jolvi

14

在此处查看“ 打开终端”。它可能与“在此处打开命令窗口”最相似。我曾经用过>cdto,这非常相似,但是在处理Spaces方面似乎更好一些……但并不完美。

它具有的一个很好的功能是能够“ 在应用程序启动时检测按键按下事件,并使用它们来修改脚本的行为 ”,从而允许脚本在调用时在最前面的终端窗口中打开新选项卡。按住⌘键。整洁的把戏。

另请注意PCheese的答案;对于重型终端用户来说,它可能更有用!


12

vgm64d0k发布了非常漂亮和苗条的Open Terminal的更新版本。詹姆斯·戴维·洛James David Low)做出了改变。他在自己的网站上发布了新版本。只需下载OpenTerminalHere.zip,解压缩它,将捆绑包移到“ Library / Scripts”文件夹,然后将其从其中拖到Finder工具栏即可。

它的特殊之处在于,如果已经打开Terminal.app窗口,它将始终打开一个新选项卡。很有用!我还注意到,该应用程序的按钮的风格更符合雪豹Finder.app款式比cdto发表节录一样。


这太棒了!请注意,您必须将其按住Command + Drag(而不只是像上面的文章中所述进行拖动)到Finder工具栏。然后,您将拥有一个图标快捷方式,单击该快捷方式将在任何文件夹中终止。
B. Nadolson

10

另外,您可以使用Command-C从查找程序中复制项目,跳至终端(例如,使用Spotlight或QuickSilver),键入“ cd”,然后简单地使用Command-v粘贴


4

我为finder工具栏创建了一个包含3个应用程序的捆绑包。其他两个应用程序执行以下操作:

  • 用当前选择打开Textmate
  • 用当前文件夹打开GitX

有关更多信息,请参见此处:http : //nslog.de/posts/71


3

如果您安装Big Cat Scripts(http://www.ranchero.com/bigcat/),则可以添加自己的上下文菜单(右键单击)项。我不认为它带有“在此处打开终端” AppleScript,但是我使用了此脚本(我不诚实地记得自己写过的,还是从别人的例子中摘下来的):


on main(filelist)
    tell application "Finder"
        try
            activate
            set frontWin to folder of front window as string
            set frontWinPath to (get POSIX path of frontWin)
            tell application "Terminal"
                activate
                do script with command "cd \"" & frontWinPath & "\""
            end tell
        on error error_message
            beep
            display dialog error_message buttons ¬
                {"OK"} default button 1
        end try
    end tell
end main

相似的脚本还可以使您在单击鼠标右键时获得文件的完整路径,我发现它甚至更有用。


3

它比您想要的要多一点,但是我建议Cocoatech的“路径查找器”适合希望该查找器有更多果汁的任何人。它包括一个用于打开当前目录的“终端”窗口的工具栏按钮,或每个Finder窗口底部带有“终端”命令行的可伸缩窗格。加上许多其他功能,这些都是我现在无法没有的。非常成熟,稳定的软件。 http://cocoatech.com/


2

好的,我意识到这有点晚了……也许在撰写本文时还没有这种选择?

无论如何,我发现通过Fink安装pos软件包(在这种情况下是先决条件,对于使用MacPorts的用户来说可能有些类似的东西)是最简单的解决方案。您得到两个命令:

  1. posd-给出最前面的Finder窗口的当前目录(您可能为其指定别名cdf = cd posd)
  2. fdc-将最前面的Finder窗口的当前目录切换到Terminal pwd。这与'open'略有不同。它总是打开一个新的查找器窗口。

是的,在编写cdf之前必须切换到“终端”窗口,但是与在Finder工具栏上单击按钮相比,我认为这是很便宜的。而且它也可以与iTerm一起使用,您不必下载单独的Finder工具栏按钮即可打开iTerm窗口。这与PCheese提出的方法相同,但是不必使.bash_profile混乱。



1

我主要使用此功能:

cf() {
  cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"
}

您还可以为脚本分配快捷方式,如下所示。

重用现有的选项卡或创建一个新窗口(终端):

tell application "Finder" to set p to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of p in window 1
    else
        do script "cd " & quoted form of p
    end if
    activate
end tell

重复使用现有标签或创建新标签(终端):

tell application "Finder" to set p to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
    activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of p in window 1
end tell

始终创建一个新标签页(iTerm 2):

tell application "Finder" to set p to POSIX path of (insertion location as alias)
tell application "iTerm"
    if exists current terminal then
        current terminal
    else
        make new terminal
    end if
    tell (launch session "Default") of result to write text "cd " & quoted form of p
    activate
end tell

与10.7中添加的服务相比,前两个脚本具有两个优点:

  • 他们使用标题栏上的文件夹,而不是要求您首先选择一个文件夹。
  • 如果最繁忙的选项卡不忙,则它们会重用最前面的选项卡,例如,运行命令,显示手册页或运行emacs。

0

OSX 10.6上的AppleScript中有一个错误。(打开2个终端窗口)。我通过在激活后添加close命令来解决此问题。关闭第一个“终端”窗口。

on run
    tell application "Finder"
        try
            activate
            set frontWin to folder of front window as string
            set frontWinPath to (get POSIX path of frontWin)
            tell application "Terminal"
                activate
                close
                do script with command "cd \"" & frontWinPath & "\""
            end tell
        on error error_message
            beep
            display dialog error_message buttons ¬
                {"OK"} default button 1
        end try
    end tell
end run

2
您为什么要关闭终端窗口?那不会破坏您在其中所做的任何工作吗?
罗伯·肯尼迪
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.