Как получить bufspec при использовании Vimdiff Through Git - PullRequest
9 голосов
/ 24 марта 2010

Я прочитал Vimdiff и Просмотр различий с помощью Vimdiff плюс выполнение различных поисков в Google с использованием таких вещей, как "vimdiff множественный", "vimdiff git", "команды vimdiff" и т. Д.

При использовании do или diffg я получаю ошибку «Более двух буферов в режиме сравнения, не знаю, какой использовать».

При использовании diffg v: fname_in я получаю «Нет соответствующего буфера для v: fname_in».

Из документации vimdiff:

: [range] diffg [et] [bufspec]
Изменить текущий буфер, чтобы отменить разницу с другим буфер. Если задан [bufspec], этот буфер используется. Если [bufspec] ссылается на текущий буфер, тогда ничего не происходит. В противном случае это работает, только если в diff есть еще один буфер режим.

и более:

Когда 'difxpr' не пуст, Vim вычисляет файл diff в упомянутый формат. Эти переменные устанавливаются на используемые имена файлов:

v: fname_ в исходном файле
v: fname_new новая версия того же файла
v: fname_out результирующий файл различий

Итак, мне нужно получить имя bufspec, но переменные по умолчанию (fname_in, fname_new и fname_out) не установлены.

Я запустил команду git mergetool на компьютере с Linux через терминал.

[Изменить] Частичное решение, которое породило больше вопросов. Я использовал «имя файла» в нижней части буфера. Это только половина ответа, потому что иногда я получаю файл, не существует ошибки. Я считаю, что это удаленная версия файла, которая "не существует". Я подозреваю, что это как-то связано с git и индексацией.

Как получить значение bufspec последовательно при использовании vimdiff через git-mergetool?

Ответы [ 3 ]

10 голосов
/ 27 апреля 2010

Аргумент [bufspec] выше может быть номером буфера, шаблоном для имени буфера или частью имени буфера.Примеры:

  • :diffget Использовать другой буфер в режиме сравнения
  • :diffget 3 Использовать буфер 3
  • :diffget v2 Использовать буфер, соответствующий v2 и находится в режиме сравнения (например, file.c.v2)

Я всегда использую номер буфера.

6 голосов
/ 25 мая 2012

Введите «2», а затем Ctrl-G, он показывает номер буфера и файл.

3 голосов
/ 01 апреля 2016

Чтобы перечислить доступные номера и имена буферов (допустимые значения для bufspec ), используйте :ls

(Из заголовка этого вопроса я думал, что именно об этом и спрашивали.)

:ls выведет список номеров и имен буферов. Окно, в котором в данный момент находится курсор, будет обозначено %:

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

При использовании diffget или diffput любая подстрока, уникально совпадающая с именем буфера, может использоваться в качестве аргумента bufspec . Например, предполагая состояние, отраженное в приведенном фрагменте, мы можем использовать:

diffget REM

для получения версии Gemfile.lock.REMOTE.4828.lock изменения, которое в данный момент находится под курсором.

...