退出vim时自动运行脚本?

时间:2013-12-04 21:20:31

标签: bash vim

我正在努力跟踪我的工作时间,我必须详细记录我正在编辑哪些文件以及何时编辑。在我的.vimrc脚本中,我有:

:silent !clock_in_script.sh %:p

这个clock_in_script.sh将文件的位置作为参数,只是将文件名和时间写入日志。

退出vim时有没有办法同样调用脚本?如果没有,有没有办法可以编写我正在编辑的文件的名称和从vim写入日志文件的时间?

提前谢谢!

3 个答案:

答案 0 :(得分:3)

有一个事件VimLeave(:h VimLeave)符合您所描述的要求。

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

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

答案 1 :(得分:3)

感谢那些提出autocmd事件的人。 我发现最合适的事件是 BufWinEnter BufWinLeave 。这正是我在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命令绑定到vim中的事件(如保存文件)的有用方法。有关详情,请参阅autocmd here

答案 2 :(得分:2)

不确定您想要做什么,但您可以使用自动命令以及BufRead和BufWrite参数来编写内容。请参阅herehere