【问题标题】:How to list all lines with changes to easily navigate between changes with emacs?如何列出所有更改的行以便在 emacs 更改之间轻松导航?
【发布时间】:2014-01-09 09:04:48
【问题描述】:

我希望git 向我显示在两次特定提交之间更改的所有行,包括每行的文件名和行号。我想输出类似于

file.cpp:20:- void deletedFunction()
file.cpp:20:+ int addedFunction()
Makefile:3:-# removed comment

我想通过 compile-modenext-error 命令轻松浏览所有使用 emacs 提交的更改。因此,第二个 : 之后的确切输出可能看起来不同,但 filename:line:... 应该在那里。此外,并非所有更改都必须列出 - 仅添加或仅删除也可以开始。

【问题讨论】:

  • 我想知道(强制性问题):你对magit不满意,为什么?您可以查看差异,导航并点击 以转到文件和行 nb。我觉得不错。
  • @Ehvince 耶!我不知道 'magit. I thought the vc-git' 是首选工具。我会试试看(哎呀:install/magit: Ignoring unsupported flavor emacs24,该死的。但我想我可以解决这个问题)。你可以让你评论一个答案。

标签: git emacs git-diff git-log


【解决方案1】:

我从未使用过magit(尽管我听说过好消息),而且我很少使用git(我是hg 人),但所有这些都应该适用于受支持的VCS vc 模式。

它不像compilation-mode 那样工作,但您可以使用diff-mode 轻松浏览差异。

获取差异缓冲区:

  • C-x v = 对当前文件进行比较。
  • C-x v D 对目录进行递归比较。
  • C-x v d 将您带到一个缓冲区,将所有修改/添加/未跟踪/等。存储库中的文件。您可以使用m 选择它们,并使用= 区分所选文件。

在差异缓冲区中:

  • n 去下一个大块头。
  • p 去上一个大块头。
  • N 转到下一个文件。
  • P 转到上一个文件。
  • o 转到当前大块的源文件。

【讨论】:

    【解决方案2】:

    很高兴看到我的评论解决了你的问题 :) 我说: «我想知道(强制性问题):您对 magit 不满意,为什么?您可以查看差异、导航并点击以转到文件和行 nb。我觉得不错。»

    Magit 手册在这里:http://magit.github.io/master/magit.html 和github上的代码:https://github.com/magit/magit

    完整介绍:http://www.masteringemacs.org/articles/2013/12/06/introduction-magit-emacs-mode-git/

    (和往常一样,ELPA 提供:M-x list-packages

    享受吧!

    ps:我使用的两个配置:

    ; use ido to switch branches
    ; https://github.com/bradleywright/emacs-d/blob/master/packages/init-magit.el
    (setq magit-completing-read-function 'magit-ido-completing-read)
    ;; open magit status in same window as current buffer
    ;; (setq magit-status-buffer-switch-function 'switch-to-buffer)
    ;; highlight word/letter changes in hunk diffs
    (setq magit-diff-refine-hunk t)
    

    【讨论】:

    • magit 工作(通过牛奶盒安装包)。只有通过“查看差异,导航 ”,我总是必须返回到 *magit-diff* 缓冲区。像next-error 这样的键绑定在任何缓冲区中都可以使用。也许我可以为此使用 kbd 宏
    • 确实使用宏非常容易。您可以将其保存为函数并将其绑定到任何键。不过,我不明白你的工作流程,但好的。 Magit 允许查看缓冲区中的所有修改(使用 TAB 来开发/隐藏更改,使用 1、2 或 3 选择视图的详细信息)。审阅和编辑对我来说是两个不同的任务,你似乎想同时完成这两个任务。我说的对吗?
    • 是的,我处于编辑模式:进行此特定更改的开发人员忘记了 80% 的更改中的某些内容。我现在可以使用*magit-diff*:我留在差异缓冲区中查看更改,并使用宏修复光标所在的更改。可爱的。
    【解决方案3】:

    注意 git-gutter:https://github.com/emacsorphanage/git-gutter。 它为您提供:git-gutter:next-hunkgit-gutter:previous-hunk。它与magit 的组合提供了良好的体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-07
      • 2011-11-15
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多