上面是 lazygit, 他的布局是左边文件树,右边该文件/文件夹 的diff
magit 是否原生支持这样的布局,或者如何实现呢?
magit确实没太用过,以前用ztreediff 还行,估计改改可以接入
我也需要这样的功能,等高手
应该不支持。
magit 这种只有上下一维,再加上左右的话不是很好控制。
如果你想 diff 单个文件可以在 buffer 里使用 magit-diff-buffer-file
巧了,前几天刚刚想到可以用 dirvish 来做这个。 根据题主的描述试着写了一下,发现在 dirvish 的架构下写一个刚刚够用的版本并不难。
解释一下图里的操作 (窗口太小不好意思,太大的话 4m 录不完) :
dirvish-diff
: 打开一个 diff 模式的 dirvishdirvish-magit-[un]stage-files
用来 stage/unstage 当前标记的文件。无标记则默认当前光标下的文件。有兴趣可以试试。刚刚推送到 feature/menu 这个分支。
设计思路完全不同,要magit支持这一的layout有难度。magit本身的使用非常好了,个人觉得没有必要。
感觉有点像ztree-diff
这也是我使用 magit 过程中的痛点之一。magit 的界面大部分时候是高效好用的,就是有时候我想要「鸟瞰」一下整个项目,哪里有修改,哪里有新文件之类的。这个时候就希望能以树状结构扫一眼整个项目。
还是解释一下图里的操作:
我先用 dirvish-side
打开了一个 Dirvish 边栏,这里已经提供了文件的基本 git 信息。
此时我想进一步的浏览文件的 diff, 于是我用 dirvish-toggle-fullscreen
进入全屏,
diff 信息会在预览窗口显示,其他操作和我在 5 楼所说的一样。浏览完以后我再次
dirvish-toggle-fullscreen
退出了全屏。我个人觉得这是一个比较好的方案,因为这个过程中除了最大化看 diff 的操作,其他时间里 magit 的 buffer 还是可见的,对 magit 的工作流几乎没有影响。有的朋友会喜欢把这个边栏常驻,那就更没什么影响了,组合起来比 vscode 和 lazygit 之类的好用的多。
dirvish-side
的相关设置如下。
(setq dirvish-side-attributes (append '(vc-state git-msg) dirvish-attributes))
(setq dirvish-side-preview-dispatchers (append '(vc-diff) dirvish-preview-dispatchers))