在使用 shell 对 git 进行了几个小时的试用后,我切换到了 magit
它非常简洁高效:我不再需要输入“git”来调用 git 命令了!
但我仍然发现比较 shell 命令行的一个缺点
每次我输入:调用 git 命令时,输出都会在另一个窗口中弹出。我必须输入C-x o才能切换回来,然后再次输入 git 命令。
除了 emacs 中的 shell 模式之外,还有更好的方法来同时输入和观察输出吗?
我应该将输出重新绑定到其他模式吗?哪一个?或更优雅的解决方案?
非常感谢
我同意布赖恩的观点,你想通过简单的按键触发器来做什么 magit 无法做到的事情?可能已经有一个键绑定了。如果不是,我只是C-z
拖放到 shell 并运行命令,然后键入fg
以将 emacs 带回前台。
编辑:我的流程是这样的。
git diff
在命令行中输入只是为了查看前一天是否有任何未提交的更改(不要忘记启用颜色!)我在命令行中与 magit 相对的原因是因为我还没有在 emacs 中。emacs file1 file2
要么打开一些我将要处理的文件。C-c i
以打开 Magit 状态窗口。s
,要么u
取消暂存这些更改。s
,并u
暂存和取消暂存代码部分。如果我在某处有一些调试代码并想杀死它,这很有用。c
以打开 magit-edit-log。我键入我的提交消息,然后键入C-c C-c
以提交它。然后P
推它。完毕!请注意,这听起来像是很多步骤,但它很快就会变得自然,整个过程实际上需要 30 秒来区分我的整个更改集,暂存它们,并通过消息提交它们。一直呆在 Emacs 中。比下拉到命令行要容易得多。
有时,当我通过 Magit 进行推送时会返回错误,这通常是由远程仓库中的新代码引起的,我必须在推送之前拉取这些代码。在这种情况下F
,先拉更改,然后P
再推。老实说,出于某种原因,我通常只是Ctrl-z
在这种情况下,而不是通过 magit 拉动,下拉到 shell git pull
, 和git push
.
编辑:我想我记得 Magit 的默认差异颜色非常糟糕。我在我的 .emacs 中使用了以下内容,我确定我是从某个地方偷来的:
;; change magit diff colors
(eval-after-load 'magit
'(progn
(set-face-foreground 'magit-diff-add "green3")
(set-face-foreground 'magit-diff-del "red3")
(when (not window-system)
(set-face-background 'magit-item-highlight "black"))))
(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
(eval-after-load 'diff-mode
'(progn
(set-face-foreground 'diff-added "green4")
(set-face-foreground 'diff-removed "red3")))
当我使用 Magit 时,我通常在我的大部分工作中使用 Magit 的内置命令,并且当我需要执行 Magit 内置命令无法完成的事情时,只需使用常规终端即可。Magit内置了几乎所有我日常使用的命令;您经常使用 Magit 不提供的东西,并且无论如何您都不会在成熟的终端中使用什么?
一个关于magit-run*
解决这个问题的建议。可能会中断其他呼叫magit-run*
,我没有进一步测试...
(defadvice magit-run* (around stay-in-magit activate)
(flet ((pop-to-buffer (buf &optional act rec) (display-buffer buf act)))
ad-do-it))