xing2
2019 年9 月 2 日 07:41
1
需求:
在浏览代码时,想追踪某一行(或几行)的历史,然后 magit-blame 只显示上一次修改时的 log。
目前方案:
用 magit log 的 -L option
缺点:
flow 不够流畅,需要从当前正在看的代码中脱离出去,还要手动输入 file 和 trace 范围。
自己写了个小 function,来简化流程:
(defun my-magit-log-line ()
(interactive)
(let* ((file (buffer-file-name (current-buffer)))
(trace (magit-read-string “Trace”))
(optstr (concat "-L " trace “:” file)))
(message optstr)
(magit-log-current nil `(,optstr))))
现在流程变成:
在浏览文件时,M-x my-magit-log-line (当然也可以绑定到什么快捷键),然后输入 28,+5 这类(从28行开始的5行),就可以了。
改进思路:
自动获取当前所选的行,然后就不用让用户输入了,flow 变成 select a region, 然后 M-x magit-log-line 即可
2 个赞
没有太懂楼主需求,不过如果我想追溯这段代码的修改历史的时候,我会用 git-timemachine 这个工具,进去之后按 p n 就可以在历史之间浏览了。
1 个赞
xing2
2019 年9 月 3 日 06:54
4
多谢推荐,git-timemachine 很好用
我的需求是想看针对某几行的历史变化,比如一个文件可能有 100 个 commits,但针对 line 20-25 可能只有三个,我就是想看到这三个。
对应的 git 命令是 git log -L
xing2:
自动获取当前所选的行
第一遍看帖子没看到这句,想着“输入28,+5
干什么,按选中区域行号就好了嘛”
刚好前几天写过获取行号的代码,in case楼主还没改好:
(defun line-number-at-position (pos)
"Returns the line number for position `POS'."
(save-restriction
(widen)
(save-excursion
(goto-char pos)
(+ 1 (count-lines (point-min) (line-beginning-position 1))))))
1 个赞
可以从内置c的一个display number入手
1 个赞
jirex
2019 年9 月 10 日 02:03
7
在spacemacs中, SPC+g+M+s 是不是你要的
zacs
2023 年3 月 28 日 05:33
9
先选中一块区域,然后使用 C-x v h
(vc-region-history) 就可以了
4 个赞