首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本调用vim编辑器,获取exit方法

Shell脚本调用vim编辑器,获取exit方法
EN

Stack Overflow用户
提问于 2013-02-28 17:57:28
回答 3查看 655关注 0票数 2

我将要编写一个shell脚本来编辑一些文件。

我是这样做的:

代码语言:javascript
复制
/usr/bin/vim $file

现在我想问一下vim的退出状态。如果用户关闭时保存了更改(:wq或:x),或者关闭时没有更改(:q,:q!)做一些其他的事情

代码语言:javascript
复制
if [ vi-exit-status=wq ] ; then
    # do this
else # vi didn't save anything
    # do that
fi

我该怎么做呢?当我调用vi创建一个新文件并退出它而不保存时(:q!)然后我通过以下方式检查状态

代码语言:javascript
复制
echo $?

答案是0。如果我通过vi/vim保存一些东西或创建一个文件,它也是0。

亲切的问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 18:02:30

退出状态不会告诉你用户在vim中做了什么。也许您可以比较文件之前和之后的时间戳,看看它是否被写入?

这对我来说很有效:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2013-02-28 18:03:48

退出状态与仅当应用程序失败时不同。

在这种情况下,我建议你:

  1. 将当前md5sum保存到变量
  2. 打开vim
  3. 将当前md5sum保存到变量
票数 1
EN

Stack Overflow用户

发布于 2013-02-28 18:17:21

影响Vim退出状态的惟一方法是使用:cquit,但用户通常不会这样做。

您想要的是文件是否已被Vim修改的指示。您可以通过检查编辑前后的修改时间来完成此操作,如下面的Bash代码片段所示:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15132481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档