Как получить bufspec при использовании Vimdiff через Git

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

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

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

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

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

и больше:

Если 'difffexpr' не пусто, Vim оценивает получение файла diff в указанном формате. Эти переменные устанавливаются на используемые имена файлов:

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

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

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

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

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


person Elizabeth Buckwalter    schedule 24.03.2010    source источник


Ответы (3)


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

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

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

person nono    schedule 27.04.2010
comment
Так что используйте: diffget и что такое комбинация символов после второй точки? - person Elizabeth Buckwalter; 27.04.2010
comment
Это потрясающе. Можно было бы подумать, что об этом легко догадаться. Думаю, я был слишком раздражен, чтобы увидеть что-то настолько простое. вздох Спасибо, спасибо! - person Elizabeth Buckwalter; 28.04.2010

Введите «2», а затем ctrl-g, это покажет вам номер буфера и файл.

person Memo    schedule 25.05.2012

Чтобы перечислить доступные номера и имена буферов (допустимые значения для 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 изменения, которая в данный момент находится под курсором.

person Stew    schedule 01.04.2016