2013-02-28 88 views
2

我即將編寫一個shell腳本來編輯一些文件。Shell腳本調用vim編輯器,獲取退出方法

我做這樣的:

/usr/bin/vim $file 

現在我要問的vim的退出狀態。 如果用戶保存的更改關閉做一些事情(:WQ或:X),或者如果關閉無需改動(:Q,:!Q)做別的事情

if [ vi-exit-status=wq ] ; then 
    # do this 
else # vi didn't save anything 
    # do that 
fi 

我怎麼能這樣做? 當我打電話vi來創建一個新的文件,並退出而不保存(:Q),然後我通過

echo $? 

答案是0。如果我保存的東西,或通過VI創建文件檢查狀態/ VIM,它也爲0。

親切的問候

回答

0

退出狀態不會告訴你什麼是用戶在vim一樣。也許你可以比較前後文件的時間戳,看它是否寫入?

這個工作對我來說:

echo Edit me > editme.txt 
time1=`stat -c%y editme.txt` 
vim editme.txt 
time2=`stat -c%y editme.txt` 
if [ "$time1" != "$time2" ]; then 
    echo You saved it. 
else 
    echo No change. 
fi 
+0

謝謝你,這個劇本的工作。 這樣做的好方法:) – 2013-02-28 12:39:51

1

退出狀態是不同的,從只有一個應用程序失敗。

在你的情況我建議你:

  1. 保存當前的md5sum到一個變量
  2. 開放VIM
  3. 保存當前的md5sum到一個變量
  4. 比較兩種
0

唯一影響Vim退出狀態的方法是使用:cquit,但用戶通常不會那樣做。

你想要的是表示文件是否被Vim修改過。您可以通過檢查修改時間編輯之前和之後,想在這個猛砸片斷做到這一點:

EDIT=/path/to/file.txt 
MODTIME=$(stat -c %Y "$EDIT") 
"$EDITOR" "$EDIT" || { echo 2>&1 "Unclean exit of editor; aborting!"; exit $?; } 
NEWMODTIME=$(stat -c %Y "$EDIT") 

if [ $NEWMODTIME -eq $MODTIME ]; then 
    echo "No changes done." 
    exit 0 
fi