退出vim时自动运行脚本?

Jam*_*Lay 5 vim bash

我试图跟踪自己的工作时间,并且必须保持非常具体的详细信息,说明正在编辑哪些文件以及何时编辑。在我的.vimrc脚本中,我有:

:silent !clock_in_script.sh %:p
Run Code Online (Sandbox Code Playgroud)

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

退出vim时,有没有办法类似地调用脚本?如果没有,有什么办法可以将我正在编辑的文件的名称以及时间从vim写入日志文件?

先感谢您!

Jam*_*Lay 8

感谢那些建议 autocmd 事件的人。我发现最合适的事件是BufWinEnter和BufWinLeave。这正是我在 vim 中放入的内容:

:autocmd BufWinEnter * !clock_edit %:p
:autocmd BufWinLeave * !clock_close %:p
Run Code Online (Sandbox Code Playgroud)

clock_edit bash 脚本:

#!/bin/bash
echo "`date`:: opened file $1" >> ~/.clock_log
Run Code Online (Sandbox Code Playgroud)

时钟关闭:

#!/bin/bash
echo "`date`:: closed file $1" >> ~/.
Run Code Online (Sandbox Code Playgroud)

例如,当我打开时config.txt,vim 会调用clock_edit /node/proj/config.txt. 如果我打开多个文件作为选项卡,我打开的每个文件都会调用clock_open,我关闭的每个文件都会调用clock_close,并将适当的文件名和路径作为参数传递。更好的是,当我切换选项卡或窗口焦点时,它不会重复该过程,只是在我打开和关闭文件时。

谢谢你的帮助!

编辑:autocmd 是将 vim 命令绑定到 vim 中的事件(例如保存文件)的有用方法。有关更多信息,请在此处阅读有关autocmd 的信息。


Ken*_*ent 5

有一个事件VimLeave(:h VimLeave) 是为了满足您所描述的要求。

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

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