Показать все локальные изменения в файле vim

Я знаю, что можно перейти к последнему изменению в vim, например так:

`. 

- То есть обратный удар, за которым следует точка.

Я хотел бы знать, возможно ли получить историю внесенных изменений или хотя бы показать последние сделанные изменения, а не просто перейти к ним - есть ли способ использовать diff, чтобы помочь отобразить изменения?

Кроме того, сколько изменений хранится?

2 ответа

Решение

Вы можете перечислить изменения, набрав :changes или используйте :DiffOrig после помещения в .vimrc Команда ниже, чтобы увидеть изменения, внесенные в исходный файл:

command! DiffOrig rightbelow vertical new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Объяснение:


  • команда DiffOrig справа внизу вертикаль новая

Создайте новую команду с именем DiffOrig который разделит новое пустое вертикальное окно и наведет на него курсор.

Теперь у нас есть два буфера, если вы печатаете :buffers или же :files или же :ls в нем будут перечислены все существующие буферы, каждый из которых имеет уникальный идентификационный номер и имя:

, Текущий буфер (где активен курсор) называется %

, Буфер, в котором ранее находился курсор, называется #

  • установить bt=nofile

Установить buffertype нового буфера в nofile

  • читать #

Поместить содержимое альтернативного буфера (исходный) в текущий буфер (%) (после строки, в которой выполняется команда) (содержимое будет последним сохраненным статусом)

  • 0d_

Удалите строку, чтобы переместить содержимое на одну строку вверх.

  • diffthis

Активируйте diff в буфере для отображения изменений.

  • винкмд р

Переместиться в другое окно буфера (команда такая же, как ctrl-w p)

  • diffthis

Активируйте diff в этом буфере, чтобы отобразить изменения.

Кажется, что на это уже ответили:

увидеть изменения в vim перед сохранением

после добавления следующего в мой.vimrc:

function! s:DiffWithSaved()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
com! DiffSaved call s:DiffWithSaved()

тогда я могу использовать следующую команду:

: DiffSaved

и я получу что-то вроде этого:

пример vim в терминале

в примере я изменил F на F

Другие вопросы по тегам