Vimdiff и Git все сразу

2539
So8res

Я использую vimdiff в качестве моего difftool с git.

Допустим, я изменил двенадцать файлов. Проблема в том, что иногда я запускаю git diffи вокруг четвертого или пятого файла я вижу что-то, что я хочу отредактировать / изменить. Иногда мне нужно сделать еще несколько изменений вне этого. Проблема в том, что я не могу просто :qaвернуться к взлому, потому что в vimdiff появилось еще шесть или семь различий. Это становится действительно утомительным для :qaвсех этих файлов, не смотря каждый раз, когда я хочу прервать git diff.

Есть ли способ настроить vimdiff как difftool для git, чтобы все diff-файлы открывались в одном и том же экземпляре vim, например, в отдельных вкладках?

5
У меня никогда не было идеи, почему вкладки были введены и как их можно разумным образом использовать. Это первый вариант использования, где вкладки действительно имеют смысл. Marco 12 лет назад 0
Согласен. Единственный реальный вариант использования, который я видел для вкладок, - это когда я хочу открыть похожую группу буферов в другой конфигурации окон; то есть одна вкладка имеет заголовок и исходный файл в разделении, в то время как другая вкладка имеет исходный файл и файл сборки в вертикальном разделении. Или что-то. И иногда хорошо иметь «стек окон», то есть вы редактируете четыре файла в некоторых разделениях и хотите быстро отредактировать ваш vimrc, `: tabe ~ / .vimrc`, за которым следует`: bd` хороший комбо. So8res 12 лет назад 0
Сделал это для меня http://stackoverflow.com/q/2428051/168034 phunehehe 12 лет назад 0

3 ответа на вопрос

4
jmetz

You could use the vim plugins published here. Then you just need to set the difftool:

[multidiff] tool = vd -f 

As an alternative application I would suggest meld, which will show you modified files - you can then select just the files who's diffs you want to see.

See the screenshot here for an example.

Further to Marcos useful comment, as a third (manual alternative) if you want to use vimdiff I would recommend following meld's strategy in a script (possibly python):

  • use git diff-files --name-status and git diff-index --name-status --cached HEAD to identify files that need to be examined.
  • Get cached versions of these files and place in /tmp/
  • Open all of these files - the changed files and their cached versions - at once in vimdiff - though most likely not possible in the sense that you require- see below.

However, as vimdiff itself doesn't seem to handle multiple diff tabs natively I recommend one of my other suggestions above.

Это было бы лучше использовать в качестве комментария, поскольку он не отвечает на вопрос вообще. Marco 12 лет назад 0
Спасибо за ваше предложение @Marco - я надеюсь, что мои изменения улучшили мой ответ. jmetz 12 лет назад 0
Они сделали определенно. Это не то, что я бы назвал элегантным, но, похоже, работает. Я дам ему две недели тестирования, если это практическое решение. Спасибо за то, что поделились этим «вторжением» vim, в то время как diffing всегда беспокоил меня. Marco 12 лет назад 1
3
Laurent Winkler

Очень простой обходной путь - добавить эту опцию в ваш файл ~ / .gitconfig.

[difftool] tool = vimdiff $LOCAL $REMOTE prompt = true 

Таким образом, перед каждым сравнением файлов вам будет предложено пропустить файл, ответив «нет», или прервать сравнение файлов с помощью Ctrl + C.

Пример:

$ git difftool Viewing: 'file1.js' Launch 'vimdiff' [Y/n]: y 2 files to edit  Viewing: 'file2.js' Launch 'vimdiff' [Y/n]: n 
1
Lewis R

Это то, что я использую. Требуется, чтобы вы использовали vim-fugitive

[alias] dt = "!f() { vim -p $(git diff --name-only) +\"tabdo Gdiff $@\" +tabfirst; }; f"

git dtзатем откроет каждую пару различий в отдельной вкладке. Затем :tabcloseзакрыть одну пару или :qaвыйти.

источник

Будет ли это работать с несколькими ссылками вместо сравнения с рабочими файлами? Spidey 5 лет назад 0
Нет, так как это работает, открывая все рабочие файлы и запуская Gdiff на каждой вкладке. Lewis R 5 лет назад 0