2016-12-30 92 views
1

我经常用这个在我的项目,看到的变化:写的ctags的差异/补丁文件支持VIM

git diff 5b80e3be314143f 3b34d24a55ab -- include/* src/* | vim - 

所有线开始被改变这样写的文件:

diff --git a/include/behaviors/mechanical/crystal_behavior.h b/include/behaviors/mechanical/crystal_behavior.h 

我希望能够使用标签栏轻松导航文件,该标签栏使用ctags并获取文件名,例如crystal_behavior.h。 所以,我知道我可以使用像这样的.ctags文件:在我的.vimrc

let g:tagbar_type_diff = { 
    \ 'ctagstype' : 'diff', 
    \ 'kinds'  : [ 
    \ 'd:Files', 
    \ ], 
    \ 'sort' : 0, 
\ } 

我的问题在这里

--langdef=diff 
--langmap=diff:.diff 
--regex-diff=/^diff --git .*b\/(.*)(\/(.*))+$/\.\. \2/d,file/ 
这个

在一起,就是我可以把什么在这里--regex-diff=* ,以获得有意义的文件名? (我得到或多或少) 是否有可能进一步,并在每个文件中标记hunk?这是我无法得到的最棘手的部分。

谢谢

  • 奖金的问题:如果我直接从缓冲区中读取的差异,tagbar不会产生标签......而我是做git的差异......> patch.diff,然后vim patch.diff,它的工作原理。

回答

1

通用-ctags的(https://ctags.io)有一个内置的解析器从geany进口DIFF:

[[email protected] tmp]$ cat foo.diff 
diff --git a/source.mak b/source.mak 
index 2550028..eaa9154 100644 
--- a/source.mak 
+++ b/source.mak 
@@ -44,6 +44,7 @@ PARSER_SOURCES =    \ 
    $(PARSER_DIR)/clojure.c   \ 
    $(PARSER_DIR)/css.c   \ 
    $(PARSER_DIR)/cobol.c   \ 
+ $(PARSER_DIR)/diff.c   \ 
    $(PARSER_DIR)/dosbatch.c  \ 
    $(PARSER_DIR)/eiffel.c   \ 
    $(PARSER_DIR)/erlang.c   \ 
[[email protected] tmp]$ ~/var/ctags/ctags --fields=+K --sort=no -o - foo.diff 
a/source.mak foo.diff /^--- a\/source.mak$/;" modifiedFile 
-44,6 +44,7 foo.diff /^@@ -44,6 +44,7 @@ PARSER_SOURCES =    \\$/;" hunk modifiedFile:a/source.mak