退出vim时自动运行脚本?

10

我正在努力追踪我的工作时间,并且必须保留我编辑的文件及其时间的非常具体的细节。 在我的.vimrc脚本中,我有:

:silent !clock_in_script.sh %:p

这个clock_in_script.sh脚本需要文件位置作为参数,并将文件名和时间写入日志。

是否有一种类似的方法可以在我退出vim时调用脚本?如果没有,我能否从vim中将正在编辑的文件名和时间写入日志文件?

提前感谢!


vi your_file; run_cmd.sh? - Manny D
那可能是一个解决方案。如果可能的话,我希望它能更自动化一些。也许我可以应用一个别名,这样每次调用vim后自动运行脚本。我会记住这个方案的。 - James M. Lay
糟糕..我认为这不是一个可能的解决方案,除非使用大量的bash脚本。如果我在vim中指定多个文件,很难告诉bash脚本我正在编辑哪些文件。此外,这种方法无法记录您在不关闭vim的情况下关闭和打开文件的时间(例如,选项卡式窗口)。 - James M. Lay
1
alias tvim='_(){ { time vim $@; } 2> >(tee -a "$1.log"); }; _' - ernix
3个回答

10

感谢那些提出autocmd事件建议的人。 我发现最适合的事件是BufWinEnterBufWinLeave。以下是我在vim中所放置的内容:

:autocmd BufWinEnter * !clock_edit %:p
:autocmd BufWinLeave * !clock_close %:p

clock_edit bash脚本:

#!/bin/bash
echo "`date`:: opened file $1" >> ~/.clock_log

clock_close:

#!/bin/bash
echo "`date`:: closed file $1" >> ~/.
例如,当我打开config.txt时,vim将调用clock_edit /node/proj/config.txt。 如果我作为选项卡打开多个文件,每个文件都会调用clock_open,并且关闭每一个文件也会调用clock_close,并传递相应的文件名和路径作为参数。更好的是,当我切换选项卡或窗口焦点时,它不会重复这个过程,只有在我打开和关闭文件时才会执行。

感谢您所有的帮助!

编辑:autocmd是将vim命令绑定到事件(例如保存文件)中的一种有用的方式。有关更多信息,请阅读这里的autocmd教程


5

有一个事件VimLeave(:h VimLeave),可以满足您的需求。

然而,这种方法可能并不适用于您的需求。因为您可能在一个vim实例中打开许多文件。我总是以这种方式使用vim。在这种情况下,您只能保存当前缓冲区/文件的状态。

您可以通过 :h event 来查看vim自动命令支持的事件。还可以考虑编写一个小函数来循环所有缓冲区并调用您的命令。或者修改您的shell脚本,接受多个文件名作为参数,这样您就可以只调用一次脚本了。


3

我不确定您的具体需求,但您可以使用自动命令和BufRead以及BufWrite参数来创造一些东西。详情请参见这里这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接