summaryrefslogtreecommitdiff
path: root/plugin/linediff.vim
blob: f154d6d55dc8d5ba0303e3a6720d571148c03c3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
if exists("g:loaded_linediff") || &cp
  finish
endif

let g:loaded_linediff = '0.1.1' " version number
let s:keepcpo         = &cpo
set cpo&vim

" Initialized lazily to avoid executing the autoload file before it's really
" needed.
function! s:Init()
  if !exists('s:differ_one')
    let s:differ_one = linediff#differ#New('linediff_one', 1)
    let s:differ_two = linediff#differ#New('linediff_two', 2)
  endif
endfunction

command! -range Linediff call s:Linediff(<line1>, <line2>)
function! s:Linediff(from, to)
  call s:Init()

  if s:differ_one.IsBlank()
    call s:differ_one.Init(a:from, a:to)
  elseif s:differ_two.IsBlank()
    call s:differ_two.Init(a:from, a:to)

    call s:PerformDiff(s:differ_one, s:differ_two)
  else
    call s:differ_one.Reset()
    call s:differ_two.Reset()

    call s:Linediff(a:from, a:to)
  endif
endfunction

command! LinediffReset call s:LinediffReset()
function! s:LinediffReset()
  call s:differ_one.Reset()
  call s:differ_two.Reset()
endfunction

function! s:PerformDiff(one, two)
  call a:one.CreateDiffBuffer("tabedit")
  call a:two.CreateDiffBuffer("rightbelow vsplit")

  let a:one.other_differ = a:two
  let a:two.other_differ = a:one
endfunction