適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

ちょっとだけ便利にしたsvn.vimを結構見やすくしてみた

以前、「d:id:tekiomo:20110111 svn.vimをちょっとだけ便利に」というエントリーでsvn.vimsvn diffの他にsvn infoとsvn logの結果も表示させるようにしました。
なかなか便利なのですが、svn diffの前にsvn infoとsvn logの結果を表示させているためsvn diffが見づらくなってしまいました。


ということで、tab splitを用いてsvn diff(右側)とsvn info&svn log(左下)と各々を分けて表示させることにしてみました。
http://farm6.static.flickr.com/5084/5379666371_88a47729cf_z.jpg

diff

$ diff -u svn.vim.org svn.vim
--- svn.vim.org	2011-01-11 20:04:36.175583001 +0900
+++ svn.vim	2011-01-23 15:20:23.273972000 +0900
@@ -22,26 +22,45 @@
 
 function! Svn_diff_windows()
     let i = 0
-    let list_of_files = ''
+    let files = []
 
     while i <= line('$')
         let line = getline(i)
         if line =~ '^M'
 
             let file = substitute(line, '\v^MM?\s*(.*)\s*$', '\1', '')
-            let list_of_files = list_of_files . ' '.file
+            call add(files, file)
         endif
 
         let i = i + 1
     endwhile
 
-    if list_of_files == ""
+    if len(files) == 0
         return 
     endif
+
+    let list_of_files = join(files, ' ')
     
+    set nosplitright
+
+    vnew
+    silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile
+    execute 'normal :r!LANG=ja_JP.UTF8 svn diff ' . list_of_files . "\n"
+    setlocal nomodifiable
+    goto 1
+    redraw!
+    wincmd R
+    wincmd p
+    goto 1
+    redraw!
+
     new
     silent! setlocal ft=diff previewwindow bufhidden=delete nobackup noswf nobuflisted nowrap buftype=nofile
-    exe 'normal :r!LANG=C svn diff ' . list_of_files . "\n"
+    for file in files
+        execute 'normal :r!LANG=ja_JP.UTF8 svn info ' . file . " | grep 'URL:'\n"
+        execute 'normal :r!LANG=ja_JP.UTF8 svn log -r PREV:HEAD --limit=1 ' . file . "\n"
+    endfor
+
     setlocal nomodifiable
     goto 1
     redraw!