Нове рішення
Ви можете переглянути свої останні зміни за допомогою :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()
, але трохи складніше опрацювати, які частини файлу змінилися.