工作区工具

外部编辑器

Git 客户端是你读代码的地方,很少是你修代码的地方。从在一份差异里发现问题,到光标真的落在编辑器里那一行上,中间隔着一次文件搜索和一次滚动——每次都是。

把 Gitcito 指向你的编辑器一次,这道缝就合上了:在文件视图或追溯视图里右键点一行,它就在那里、在那一行打开。

挑一个

**设置 → 通用 → 外部编辑器。**下拉列表里是 Gitcito 在这台机器上能找到的编辑器——它先找每个编辑器的命令,然后在 macOS 上再去 /Applications 和 ~/Applications 找应用包。每次打开设置时都会重新扫一遍,所以五分钟前才装好的编辑器不用重启就会出现。

开箱即认得的有:

编辑器 它会去找的命令
Visual Studio Code code、code-insiders
Cursor cursor
Windsurf windsurf
Zed zed
Sublime Text subl
JetBrains IDEs idea、webstorm、pycharm、rustrover、goland、clion、rider、phpstorm
Xcode xed

值得知道的那条限制

跳到某一行需要编辑器的命令,而不是它的图标。 macOS 的 .app 应用包是通过 open 启动的,而 open 只接受一个路径、别的什么都不收——所以一个只以应用包形式被找到的编辑器,只会把文件从头打开;Gitcito 会在下拉列表底下如实说明,而不是假装无事发生。

补救办法在编辑器那一侧:VS Code 的 Shell Command: Install 'code' command in PATH、Sublime 的 subl 符号链接、JetBrains 的 Toolbox → Settings → Shell scripts。命令一旦存在,重新选一次编辑器,行跳转就能用了。

这些动作出现在哪里

位置 它打开什么
仓库标签页、侧边栏仓库、状态栏 仓库文件夹
文件树、提交的文件、贮藏的文件、提交编辑器 那个文件
文件树行尾的图标 那个文件,一击即达
在文件视图里右键点一行 那个文件,定位到那一行
在追溯视图里右键点一行 那个文件,定位到那一行
文件树中的 .xcodeproj 或其他包 该包,用系统关联的应用打开

只有在行号仍然有意义的地方,按行的动作才会出现:一个显示在旧提交上的文件,或者一份被倒回到更早修订版的追溯,它们的行早已对不上磁盘上的内容,所以 Gitcito 宁可在那里不提供跳转,也不把你送到错的地方。

Xcode 项目和其他包

MyApp.xcodeproj 是一个目录。Git 知道,文件树以前也这么当它——直到这开始碍事: 展开它去找 project.pbxproj、project.xcworkspace,以及 xcuserdata 下每位 开发者一个的文件夹,是为一件你本来就不打算手工编辑的东西付出的三次点击的噪音。

现在它们用包图标显示,点击这一行就会打开这个包,和在访达里双击一样。箭头 还在,所以你真正需要 project.pbxproj 的那一次——几乎总是合并冲突——照旧可以 展开进去。

会识别的:.xcodeproj、.xcworkspace、.xcframework、.framework、.app、 .appex、.dSYM、.playground、.xcuserdatad。

刻意不识别的:.xcassets 和 .lproj。它们也是包,但里面的文件确实要编辑, 折叠起来得不偿失。

限制

打开包的是系统,不是你的编辑器。 把 .xcodeproj 交给文本编辑器,它会当成 一个装满属性列表的文件夹打开——这不是点击的人想要的。所以 Gitcito 把它交给系统 关联的程序:在装了 Xcode 的 Mac 上就是 Xcode。你的编辑器设置不受影响,对任何 普通文件依旧有效。

这是命名约定,不是文件系统标志。 Gitcito 看的是扩展名,所以你碰巧命名为 notes.app 的目录也会被折叠;而在 Linux 或 Windows 上——它们只是普通文件夹—— 点击打开的是文件管理器而不是 IDE。

一条属于你自己的命令

表格里没有的东西就选自定义命令——一个包装脚本、一个远程开发启动器、一个通过你自己的垫片启动的终端编辑器。

字段 含义
命令 要运行的可执行文件。不经过 shell,所以没有 &&、管道或通配符。
名称 菜单项里怎么称呼它。
打开文件的参数 argv 模板,例如 -g {path}:{line}:{col}
打开文件夹的参数 argv 模板,通常就是 {path}

模板按空格切分,每个词元只被替换一次——带空格的路径仍然是一个参数,之后也不会再被重新解析,所以一个文件名永远变不成语法。四个占位符:{path}、{line}、{col}、{repo}。

没有值的占位符会把它的标志一起带走:--line {line} {path} 在没有行号时运行,就只剩下路径,绝不会留下一个孤零零的 --line 把文件名当成自己的参数吞掉。模板里没有 {line},无非意味着 Gitcito 不会为那个编辑器提供精确到行的动作。

这不是什么

这不是「打开方式」应用那个设置——那个会弹出系统选择器,并且记住用某一个应用打开任何东西:一张图片、一份 PDF、一个在 Finder 里的文件夹。编辑器是两者中更具体的那个,所以在两者都设了的情况下,文件树行尾的图标归编辑器;右键菜单里两者都还在。

Gitcito 从不自作主张启动你的编辑器,关掉 Gitcito 也不会关掉它:编辑器是以分离方式、作为一个独立进程启动的。

在 GitHub 上改进这份翻译