2016-12-30 2 views
1

Je l'utilise souvent dans mon projet, pour voir les changements:Ecrire ctags prennent en charge pour le fichier diff/patch dans vim

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

Toutes les lignes commençant par le fichier des changements étant sont écrits comme ceci:

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

Je voudrais être capable de naviguer facilement les fichiers avec tagbar, qui utilise ctags, et obtenir par exemple le nom de fichier, ici crystal_behavior.h. Donc, je sais que je peux utiliser quelque chose comme ceci dans un fichier .ctags:

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

Avec dans mon .vimrc

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

Mon problème ici, est ce que je peux mettre ici --regex-diff=* , pour obtenir un nom de fichier significatif? (J'ai plus ou moins) Est-ce qu'il est possible d'aller plus loin et de taguer les mecs dans chaque fichier? C'est la partie la plus difficile que je ne peux pas obtenir.

Merci

  • Bonus question: si je lis la diff directement à partir du tampon, Tagbar ne génère pas de balises ... alors que je fais est git diff ......> patch.diff, puis vim patch.diff, ça marche.

Répondre

1

Universal-ctags (https://ctags.io) dispose d'un analyseur intégré pour diff importés de geany:

[[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