2013-10-09 34 views
4

在我的文件中,我將diff-cmd設置爲調用vimdiff來查看更改的腳本。如何在查看文件之間中止vimdiff?

以下是我的問題: 我在查看兩個svn URLS之間的差異,其中有10個文件被修改。 svn diff url1 url2命令將打開第一個文件的差異。發佈:vim中的qa將顯示第二個文件的差異。現在有沒有辦法完全退出vim,放棄進一步查看diff(除了運行:qa剩下的8次)?

更新: 以下是我的腳本:

#!/bin/sh 

# use vimdiff to view diffs 
DIFF="/usr/bin/vimdiff -o" 


NUM=$# # number of arguments 
LEFT=${6} # old file 
RIGHT=${7} # new file 
L_TITLE=${3} # actual name and revision of old file 
R_TITLE=${5} # actual name and revision of new file 
ST="${L_TITLE}" 

# get the file name 
NAME=`echo $ST | tr -s ' ' '\n' | head -1` 
L_BRANCH=`echo $L_TITLE | tr -s ' ' '\n' | head -2 | tail -1` 
R_BRANCH=`echo $R_TITLE | tr -s ' ' '\n' | head -2 | tail -1` 

# get the old and new revision numbers 
L_REV=`echo $L_TITLE | tr -s '(' '\n' | cut -d ')' -f1 | tail -1 | tr -s ' ' '_' ` 
R_REV=`echo $R_TITLE | tr -s '(' '\n' | cut -d ')' -f1 | tail -1 | tr -s ' ' '_' ` 

L_REV=`echo "${L_BRANCH}__${L_REV}"` 
R_REV=`echo "${R_BRANCH}__${R_REV}"` 

# invoke vim 
$DIFF $LEFT $RIGHT -c "setl stl=$NAME%20{'$L_REV'} | wincmd W | setl stl=$NAME%20{'$R_REV'}" 

回答

0

因爲Vim(DIFF)依次與對文件(由Subversion)的調用時,Vim的退出狀態將是表明一個好辦法整個過程將被中止。 :cquit命令以錯誤代碼退出。如果周圍的可執行文件已經中止了錯誤循環,那麼就完成了。否則,這將不得不被修改。由於你似乎有一個額外的包裝腳本,圍繞着vimdiff,所以你不能忍受Vim的退出狀態(它看起來好像沒有)。

+0

我沒有按順序調用一對文件。我已經粘貼了我的腳本。 Vim被調用一次:vimdiff -o

+0

是的,你的腳本只是一個額外的包裝。我的意思是Subversion中的邏輯;希望這是一個腳本(或其他易於修改的程序),以便您可以適應它。 –

+0

你試過':cquit'是否影響循環?而誰低估了這個答案,評論中的評論就會更有幫助。 –

0
  • Subversion的diff-cmd治療比01作爲一個致命錯誤不同任何返回值。

  • 如果您用:cq關閉vimdiff,它將退出並顯示狀態碼1

您可以使用您的包裝腳本方面Vimdiff的返回值與顛覆「致命錯誤」退出,比如返回2

如果添加以下在腳本的末尾:

# if vimdiff returned 1, lets return a Subversion's fatal error code 
if [ $? -eq 1 ]; then 
    exit 2; 
fi 

exit 0 

這樣做,如果您關閉Vimdiff可以與​​:cq,任何剩餘的差異列表將不會被顯示,並Subversion會顯示錯誤信息,如:

svn: E200012: '/path/to/your/svn-diff-wrapper.sh' returned 2 
相關問題