# HG changeset patch # User Steve Losh # Date 1273880189 14400 # Node ID 791f08e6b66a0d7ffb1ecc806ca784a1ad032cc3 # Parent 64388dab95cf1d9f81e571c753cf4d69806145f1 Add vimdiff for mercurial. diff -r 64388dab95cf -r 791f08e6b66a .hgrc --- a/.hgrc Fri May 14 19:08:30 2010 -0400 +++ b/.hgrc Fri May 14 19:36:29 2010 -0400 @@ -38,6 +38,8 @@ [extdiff] cmd.fmdiff = fmdiff +cmd.vd = mvim +opts.vd = -f '+next' '+execute "DirDiff" argv(0) argv(1)' [email] method = smtp diff -r 64388dab95cf -r 791f08e6b66a vim/plugin/DirDiff.vim --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vim/plugin/DirDiff.vim Fri May 14 19:36:29 2010 -0400 @@ -0,0 +1,1070 @@ +" -*- vim -*- +" FILE: "/home/wlee/.vim/plugin/DirDiff.vim" {{{ +" LAST MODIFICATION: "Mon, 20 Oct 2008 09:04:59 -0500 (wlee)" +" HEADER MAINTAINED BY: N/A +" VERSION: 1.1.2 +" (C) 2001-2006 by William Lee, +" }}} + + +" PURPOSE: {{{ +" - Diffing a directory recursively and enable easy merging, copying and +" deleting of files and directories. +" +" REQUIREMENTS: +" - Make sure you have GNU diff in your path on Unix and Windows. I only +" tested this on cygwin's version on Windows. If you have a diff that +" doesn't support -x or -I flag, do not set variable g:DirDiffExcludes and +" g:DirDiffIgnore to "". It should still work. +" - On Windows, you need to have "xcopy", "copy", "del", and "rd" in your +" path. +" - On Unix, you need to have "rm" and "cp" in your path. +" +" USAGE: +" Put this file in your ~/.vim/plugin +" +" Doing the following will generate a diff window. +" +" :DirDiff +" e.g. +" :DirDiff ../something/dir1 /usr/bin/somethingelse/dir2 +" +" The following commands can be used inside the diff window: +" 'Enter','o' - Diff open: open the diff file(s) where your cursor is at +" 's' - Synchronize the current diff. You can also select +" a range (through visual) and press 's' to synchronize differences +" across a range. +" +" - There are 6 Options you can choose when you hit 's': +" 1. A -> B +" Copy A to overwrite B +" If A's file actually points to a directory, it'll copy it to B +" recursively. +" 2. B -> A +" Copy B to overwrite A +" If B's file actually points to a directory, it'll copy it to A +" recursively. +" 3. Always A +" For the rest of the items that you've selected, +" synchronize like (1). +" 4. Always B +" For the rest of the items that you've selected, +" synchronize like (2). +" 5. Skip +" Skip this diff entry. +" 6. Cancel +" Quit the loop and exit. +" +" 'u' - Diff update: update the diff window +" 'x' - Sets the exclude pattern, separated by ',' +" 'i' - Sets the ignore pattern, separated by ',' +" 'a' - Sets additional arguments for diff, eg. -w to ignore white space, +" etc. +" 'q' - Quit DirDiff +" +" The following comamnds can be used in the Vim diff mode +" \dg - Diff get: maps to :diffget +" \dp - Diff put: maps to :diffput +" \dj - Diff next: (think j for down) +" \dk - Diff previous: (think k for up) +" +" You can set the following DirDiff variables. You can add the following +" "let" lines in your .vimrc file. +" +" Sets default exclude pattern: +" let g:DirDiffExcludes = "CVS,*.class,*.exe,.*.swp" +" +" Sets default ignore pattern: +" let g:DirDiffIgnore = "Id:,Revision:,Date:" +" +" If DirDiffSort is set to 1, sorts the diff lines. +" let g:DirDiffSort = 1 +" +" Sets the diff window (bottom window) height (rows) +" let g:DirDiffWindowSize = 14 +" +" Ignore case during diff +" let g:DirDiffIgnoreCase = 0 +" +" Dynamically figure out the diff text. If you are using and i18n version +" of diff, this will try to get the specific diff text during runtime. It's +" turned off by default. If you are always targetting a specific version of +" diff, you can turn this off and set the DirDiffText* variables +" accordingly. +" let g:DirDiffDynamicDiffText = 0 +" +" String used for the English equivalent "Files " +" let g:DirDiffTextFiles = "Files " + +" String used for the English equivalent " and " +" let g:DirDiffTextAnd = " and " +" +" String used for the English equivalent " differ") +" let g:DirDiffTextDiffer = " differ" +" +" String used for the English equivalent "Only in ") +" let g:DirDiffTextOnlyIn = "Only in " +" +" NOTES: +" This script can copy and remove your files. This can be powerful (or too +" powerful) at times. Please do not blame me if you use this and +" disintegrate your hard work. Be warned! +" +" CREDITS: +" +" Please mail any comment/suggestion/patch to +" William Lee +" +" LICENSE: +" Copyright (c) 2001-2006 William Lee +" All rights reserved. +" +" Redistribution and use in source and binary forms, with or without +" modification, are permitted provided that the following conditions are +" met: +" +" * Redistributions of source code must retain the above copyright +" notice, this list of conditions and the following disclaimer. +" * Redistributions in binary form must reproduce the above copyright +" notice, this list of conditions and the following disclaimer in the +" documentation and/or other materials provided with the distribution. +" * Neither the name William Lee nor the names of its contributors may be +" used to endorse or promote products derived from this software without +" specific prior written permission. +" +" THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +" WILLIAM LEE AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +" +" THANKS: +" +" Florian Delizy for the i18n diff patch +" Robert Webb for his sorting function +" Salman Halim, Yosuke Kimura, and others for their suggestions +" +" HISTORY: +" 1.1.2 - Applied the patch to 1.1.0 instead of 1.0.2. Please do not use +" 1.1.1 +" 1.1.1 - Make it work with filename with spaces. (Thanks to Atte Kojo) +" 1.1.0 - Added support for i18n (tested on a French version for now only). +" Can dynamically figure out the diff strings output by diff. +" 1.0.2 - Fixed a small typo bug in the quit function. +" 1.0.1 - Ensure the path separator is correct when running in W2K +" 1.0 - Fixed a bug that flags errors if the user use the nowrapscan option. +" Implements a quit function that exit the diff windows. +" 0.94 - Fixed a bug where the diff will give incorrect A and B file due to +" similarity of directory names. Allow you to modify the diff +" argument. +" 0.93 - Opps, messed up the key mapping usage. +" 0.92 - Doesn't use n and p mappings since it confuses the search next key +" mapping and causes some bugs. Minor modification to change the +" exclude and ignore pattern. +" 0.91 - Clean up delete routine. +" - Added interactive mode. +" - Added multiple entries of exclude and ignore pattern. +" - Custom configuration through global variables. +" - Change exclude and ignore patterns on the fly. +" +" 0.9 - Reorganization of the interface. Much simplier dialog for +" synchronization. Support for range synchronization option (REALLY +" powerful) +" - Removed unnecessary key bindings. All key bindings are local to +" the diff window. (except for the \dg and \dp) +" +" 0.8 - Added syntax highlighting. +" - Enter and double-click in buffer opens diff. +" - Removed dependency on "sort" +" - Removed usage of registry and marker +" - Code cleanup and some bug fixes +" - On Windows the diff command will use the -i flag instead +" - Changed mappings for diff next (\dj) and diff previous (\dk) +" - Added mappings for vim diff mode (\dg, \dp) +" +" 0.7 Initial Release +" +" }}} + +" Public Interface: +command! -nargs=* -complete=dir DirDiff call DirDiff () +command! -nargs=0 DirDiffOpen call DirDiffOpen () +command! -nargs=0 DirDiffNext call DirDiffNext () +command! -nargs=0 DirDiffPrev call DirDiffPrev () +command! -nargs=0 DirDiffUpdate call DirDiffUpdate () +command! -nargs=0 DirDiffQuit call DirDiffQuit () + +if !hasmapto('DirDiffGet') + map dg DirDiffGet +endif +if !hasmapto('DirDiffPut') + map dp DirDiffPut +endif +if !hasmapto('DirDiffNext') + map dj DirDiffNext +endif +if !hasmapto('DirDiffPrev') + map dk DirDiffPrev +endif + +" Global Maps: +map