我试图跟踪自己的工作时间,并且必须保持非常具体的详细信息,说明正在编辑哪些文件以及何时编辑。在我的.vimrc脚本中,我有:
:silent !clock_in_script.sh %:p
Run Code Online (Sandbox Code Playgroud)
这个clock_in_script.sh将文件的位置作为参数,并将文件的名称和时间写入日志。
退出vim时,有没有办法类似地调用脚本?如果没有,有什么办法可以将我正在编辑的文件的名称以及时间从vim写入日志文件?
先感谢您!
感谢那些建议 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 的信息。
有一个事件VimLeave(:h VimLeave) 是为了满足您所描述的要求。
但是,这可能无法满足您的需求。因为你可能在一个 vim 实例中打开多个文件。我总是这样使用vim。在这种情况下,您只能保存当前缓冲区/文件的状态。
你可以:h event查看vim的自动命令支持的事件。还可以考虑编写一个小函数来循环所有缓冲区并调用您的命令。或者修改您的 shell 脚本以接受多个文件名作为参数,以便您只能调用该脚本一次。