sponsor Vim development Vim logo Vim Book Ad

basic Tip #1491: Call TortoiseSVN commands from within Vim

 tip karma   Rating 36/14, Viewed by 5538 

Read and edit this tip on the Vim tip wiki. The wiki may have a more recent version of this tip.

created:   January 26, 2007 11:31      complexity:   basic
author:   Rex Kerr      as of Vim:   5.7

Tortoise SVN is (IMO) the best Subversion GUI available.  That said, it would be nice if you could launch the various commands from within Vim so that you don't have to go back to explorer to get the context menu.  Here are some mappings that work on the current buffer.

" Save the current buffer and execute the Tortoise SVN interface's diff program
map <silent> ,tdiff  :w<CR>:silent !"C:\Progra~1\TortoiseSVN\bin\TortoiseProc.exe /command:diff  /path:"%" /notempfile /closeonend"<CR>

" Save the current buffer and execute the Tortoise SVN interface's log
map <silent> ,tlog   :w<CR>:silent !"C:\Progra~1\TortoiseSVN\bin\TortoiseProc.exe /command:log   /path:"%" /notempfile /closeonend"<CR>

" Save the current buffer and execute the Tortoise SVN interface's revision graph
map <silent> ,trevs  :w<CR>:silent !"C:\Progra~1\TortoiseSVN\bin\TortoiseProc.exe /command:revisiongraph  epath:"%" /notempfile /closeonend"<CR>

" Save the current buffer and execute the Tortoise SVN interface's blame program
map <silent> ,tblame :call TortoiseBlame()<CR>
fu! TortoiseBlame()
  " Save the buffer
  silent execute(':w')

  " Now run Tortoise to get the blame dialog to display
  let filename = expand("%")
  let linenum  = line(".")
  silent execute('!C:\Progra~1\TortoiseSVN\bin\TortoiseProc.exe /command:blame /path:"' . filename . '" /line:' . linenum . ' /notempfile /closeonend')
endfunc

Others can be added very simply by using these as a template.  The command line options are documented at:
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-automation.html

 rate this tip  Life Changing Helpful Unfulfilling 

<< Bookmark files | Wrap a Visual hilight in an arbitrary HTML tag >>

Additional Notes

[email protected], January 26, 2007 11:41
Hrm... my lines got split incorrectly, but I think that you can figure out how to fix them...
dsm26 [at] excite.com, February 6, 2007 10:42
Great Tip!  I use Vim from within bash on Windows XP and had to switch the path's to be more cygwin compliant.  I also switched some of the double quotes to single quotes.  Everything works great except that it takes forever to build my revision graph.  Here's my slight changes.  Fyi...I also used a different mapping than above, but that just a preference of mine:

" Save current buffer and diff the file using Tortoise SVN
map <unique> <silent> <leader>td :w<CR>:silent !'/C/Program Files/TortoiseSVN/bin/TortoiseProc.exe' /command:diff /path:'%' /notempfile /closeonend<CR>

" Save current buffer and launch Tortoise SVN's revision graph
map <unique> <silent> <leader>tr  :w<CR>:silent!'/C/Program Files/TortoiseSVN/bin/TortoiseProc.exe' /command:revisiongraph epath:'%' /notempfile /closeonend<CR>

" Save the current buffer and execute the Tortoise SVN interface's blame program
map <unique> <leader>tb :call TortoiseBlame()<CR>

" Save the current buffer and execute the Tortoise SVN interface's log
map <unique> <silent> <leader>tl   :w<CR>:silent !'/c/Program Files/TortoiseSVN/bin/TortoiseProc.exe' /command:log   /path:'%' /notempfile /closeonend<CR>

fu! TortoiseBlame()
  " Save the buffer
  silent execute(':w')

  " Now run Tortoise to get the blame dialog to display
  let filename = expand("%")
  let linenum  = line(".")
  execute('!/C/Progra~1/TortoiseSVN/bin/TortoiseProc.exe /command:blame /path:' . filename . ' /line:' . linenum . ' /notempfile /closeonend')
endfunc
If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
   
SourceForge.net Logo