2016-12-30 32 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