vimsuite/vimfiles/plugin/blockdiff.vim
stefan 78c85376ea Anpassung an Linux
git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@151 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
2008-03-16 17:14:03 +00:00

103 lines
2.6 KiB
VimL

" Vim BlockDiff-Plugin
"
" Author: Timo Teifel
" Email: timo dot teifel at teifel dot net
" Version: 1.1
" Date: 23 Oct 2007
" Licence: GPL v2.0
"
" Usage:
" - Select first block
" - Depending on the configuration, select:
" - Menu Tools->BlockDiff-> This\ is\ Block\ 1
" - Popup-Menu -> This\ is\ Block\ 1
" - :BlockDiff1
" - ,d1
" - select second block (may be in another file, but in the same
" Vim window)
" - Menu Tools->BlockDiff-> This\ is\ Block\ 2,\ start\ diff
" - Popup-Menu -> This\ is\ Block\ 2,\ start\ diff
" - :BlockDiff2
" - ,d2
" - Script opens a new tab, splits it and shows the diff between
" the two blocks.
" - Close the tab when done
"
" History:
" V1.0: Initial upload
" V1.1: Added commands and inclusion guard, Thanks to Ingo Karkat
" Avoid installing twice or when in compatible mode
if exists('g:loaded_blockdiff') || (v:version < 700)
finish
endif
let g:loaded_blockdiff = 1
let s:save_cpo = &cpo
set cpo&vim
" ---------- Configuration ----------------------------------------------------
" uncomment one or more of these blocks:
" Create menu entry:
vmenu 40.352.10 &Tools.Bloc&kDiff.This\ is\ Block\ &1 :call BlockDiff_GetBlock1()<CR>
vmenu 40.352.20 &Tools.Bloc&kDiff.This\ is\ Block\ &2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
" Create popup-menu-entry:
"vmenu PopUp.BlockDiff.This\ is\ Block\ 1 :call BlockDiff_GetBlock1()<CR>
"vmenu PopUp.BlockDiff.This\ is\ Block\ 2,\ start\ diff :call BlockDiff_GetBlock2()<CR>
" Shortcuts
"vmap ,d1 :call BlockDiff_GetBlock1()<CR>
"vmap ,d2 :call BlockDiff_GetBlock2()<CR>
" Commands
command! -range BlockDiff1 :<line1>,<line2>call BlockDiff_GetBlock1()
command! -range BlockDiff2 :<line1>,<line2>call BlockDiff_GetBlock2()
" ---------- Code -------------------------------------------------------------
fun! BlockDiff_GetBlock1() range
let s:regd = @@
" copy selected block into unnamed register
exe a:firstline . "," . a:lastline . "y"
" save block for later use in variable
let s:block1 = @@
" restore unnamed register
let @@ = s:regd
endfun
fun! BlockDiff_GetBlock2() range
let s:regd = @@
exe a:firstline . "," . a:lastline . "y"
" Open new tab, paste second selected block
tabnew
normal P
" to prevent 'No write since last change' message:
se buftype=nowrite
diffthis
" vsplit left for first selected block
lefta vnew
" copy first block into unnamed register & paste
let @@ = s:block1
normal P
se buftype=nowrite
" start diff
diffthis
" restore unnamed register
let @@ = s:regd
endfun
let &cpo = s:save_cpo
unlet s:save_cpo