我使用 Vim 作为 Fedora 34 工作站上的主要文本编辑器。我需要为我的一门课程创建和维护一个日志文件,以便跟踪时间和完成的工作。它应该看起来像这样:
John Doe
Log for XYZ 1101, Fall 2021
***** IN: Thu Aug 26 08:13:11 PM EDT 2021
Enter my log notes here
***** OUT: Thu Aug 26 09:22:13 PM EDT 2021
笔记:IN: 后面有两个空格,OUT: 后面有一个空格
我希望自动化这个过程,这样每次我打开这个文档(如果不可能,那么在给定的命令上)***** IN: date
都会被打印出来,并且光标会被放置在下面第二行的开头。另外,每次我关闭文档(或执行给定命令)***** OUT: date
(以及之后的空行)时,都应在最后一个文本条目下方打印两行。这将确保两个给定条目之间以及我的笔记和条目日期之间始终有一个空行。
任何人都可以帮助我做到这一点或至少指导我完成它吗?我从未编写过任何脚本或搞乱了高级 vim 设置。
编辑:使用 @muru 的评论并查找如何使用后autocmd
,我得出了以下结论。
autocmd VimEnter ~/test.log $pu=strftime('***** IN: %c')
autocmd ExitPre ~/test.log $pu=strftime('***** OUT: %c')
有用,但它并不完美。问题是:
它不会在文本之间留下额外的空行。我希望能够添加 2 个换行符。我如何使用 Vims put 命令来做到这一点?或者还有其他办法吗?
该
ExitPre
命令是唯一对我有用的命令。然而,每次我这样做:w
和:q
(或:x
)出去日期被写入并且程序不退出。相反,我必须再次保存它并强制退出:q!
。我真的不考虑这个优雅的选择。我希望这在后台发生,这样我只能退出一次,然后看到出去下次打开文档的日期。其他命令VimLeave
(如退出 Vim 之前、写入 viminfo 文件之后)根本不起作用。
任何帮助,将不胜感激!
答案1
目前的问题可以用录音来记录:
autocmd VimEnter ~/test.log $pu=strftime(\"***** IN: %c\n\n\n\")
autocmd ExitPre ~/test.log $pu=strftime('***** OUT: %c') | w
\n
用双引号展开,但使用时需要转义引号=
。或者你可以使用call append("$", [strftime("***** IN: %c"), "", ""])
.或者简单地添加一个| norm G2o
来代替。|w
将使用 写入您刚刚所做的修改$pu
。退出最初失败,因为$pu
进行了未保存的修改。