对于程序员来说经常会遇到需要在文件浏览器当前目录下打开终端输入命令的需求,在 Windows 或多数 Linux 系统中,右键菜单就有这个选项。然而在 MacOS 系统中,并没有这个功能。用搜索引擎查了一下,主流的方案有以下两种

使用系统服务菜单

在文件夹位置打开终端其实在 MacOS 设置中是支持的,但没有默认开启, 需要于 系统偏好设置 -> 键盘 -> 快捷键 -> 服务 中勾选 “新建位于文件夹位置的终端窗口”, 然后在 Finder 中选中文件夹, 右键菜单中点击 服务 下的二级菜单 “新建位于文件夹位置的终端窗口” 即可

使用 cdto

cdto 是一款开源软件, 可以将它拖拽到 Finder 的工具栏上,然后点击应用图标, 即可快速在当前位置打开一个终端窗口

这两种方法都是可行的,但在我看来并不完美, 有各自的局限性。如使用系统服务菜单, 需要右键, 定位到二级菜单然后选择, 多少有些烦琐;虽然也可以通过设置快捷键规避这一点。另外一点是你必须先选中一个文件夹,如果你目前已经在这个文件夹中了,那需要退到上级目录然后再选中文件夹才能操作。cdto 的优势在于操作简单,只需要单击一下即可,然而 cdto 的图标是有点拟物风格的,放在 Finder 中显得有些违和,并且 cdto 只支持默认的 Terminal 程序,这就劝退了一部分使用 iTerm2 的用户了。

我是使用 iTerm2 较多的,前几天偶得空闲,决定把 cdto 改改,好满足自己的需求

  • 图标风格和 Finder 工具栏其它图标一致
  • 点击图标快速打开 iTerm2 窗口,工作目录和当前 Finder 目录位置 (或选择的文件夹) 一致

虽然不熟悉 Objective-C 语言, 但好在 cdto 的代码比较简单, iTerm2 的内库和文档也比较完善, 于是经过几个小时的调试, 这么一个小工具诞生了 https://github.com/uLxy/inTerm2

我给它取名 inTerm2 表达 Open in iTerm2 的含义

已知问题

  • 打开终端瞬间会有 cd 命令一闪而过
  • 文件夹名称带有空格可能会出现问题

目前在实现部分也还不算优雅,这周末有空争取再优化一下,解决这些问题。