Новое решение
Вы можете просмотреть свои последние изменения с помощью :changes
команды. Таким образом, вы можете откорректировать свое последнее изменение строки с помощью регулярного выражения, а затем применить строку к, matchadd()
как это предложено @joeytwiddle.
Вот код:
function! DiffWithPrevious()
call clearmatches()
redir => message
silent changes
redir END
let line = matchstr(message, '\v\n\s{4}1[^0-9]*\zs\d+\ze')
highlight TemporalDiff ctermbg=green guibg=green
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
Примечание :
Эта функция только добавляет новое выделение, не удаляя старое, поэтому вам придется сначала удалить старое. С помощью clearmatches
функции вы можете удалить совпадения перед добавлением нового. Осторожно, он удалит ВСЕ совпадения. Если вы хотите больше детализации, вы можете сохранить совпадение и удалить его вручную:
например
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- После некоторых тестов я обнаружил, что это работает только для однострочного изменения.
Ссылки :
Старое решение
Вот возможное решение, в основном основанное на текущем буфере Diff и оригинальном файле :
function! DiffWithPrevious()
undo
write
redo
let filetype=&ft
diffthis
vnew | r # | normal! 1Gdd
diffthis
exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
Идея состоит в том, чтобы сравнить файл с файлом в системе, чтобы отменить последнее изменение, записать его, повторить изменение las и выполнить diff.
Я думаю, что это должно делать работу для временных визуализаций временного различия.
matchadd()
, но немного сложнее определить, какие части файла изменились.