Vim 如何使用BufWritePre更新我的cpp评论

Vim 如何使用BufWritePre更新我的cpp评论,vim,Vim,我在.vimrc中添加了一些代码,以自动更新.cpp和.h文件文档中的“Last update”字段 我已经在我的.py文件中尝试过了,并且成功了。问题是搜索以字符开头的行*Last Update。以下是我目前掌握的情况: 我的cpp文件中的注释 /** *@file test.cpp *@作者约翰·多伊 *@版本 *@brief *@date *创建日期:2019年5月21日 *最近更新: */ 还有我的vimrc autocmd BufWritePre *.h exe "%s/^ \*

我在.vimrc中添加了一些代码,以自动更新.cpp和.h文件文档中的“Last update”字段

我已经在我的.py文件中尝试过了,并且成功了。问题是搜索以字符开头的行
*Last Update
。以下是我目前掌握的情况:

我的cpp文件中的注释

/**
*@file test.cpp
*@作者约翰·多伊
*@版本
*@brief
*@date
*创建日期:2019年5月21日
*最近更新:
*/
还有我的vimrc

autocmd BufWritePre *.h exe "%s/^ \*  Last Update:.*$/Last Update: " 
      \. strftime("%d %b %Y (%T)") . "/e"
这应将评论更新为:

/**
*@file test.cpp
*@作者约翰·多伊
*@版本
*@brief
*@date
*创建日期:2019年5月21日
*最后更新:2019年5月21日(21:15:48)
*/
但我没有任何变化


更新:我的头文件(.h)中有相同的代码

已更新以使用
.cpp
.h
文件

您需要将以下内容添加到
.vimrc
或其他来源文件中:

autocmd FileType cpp,h autocmd BufWritePre <buffer> :%s/^ \*  Last Update:.*$/\=printf(' *  Last Update: ') . strftime("%d %b %Y (%T)")/e
autocmd文件类型cpp,h autocmd BufWritePre:%s/^\*上次更新:.*$/\=printf(“*上次更新:”)。strftime(“%d%b%Y(%T)”)/e
autocmd文件类型cpp,h

  • 确保它仅适用于
    .cpp
    .h
    文件
autocmd BufwritePre

  • 写入当前缓冲区
:%s/^\*上次更新:.*$/

  • 这是replacement命令的开始,在该命令中声明了要替换的模式
\=printf(“*上次更新:”)。strftime(“%d%b%Y(%T)”)/e

  • 这是{replacement}和replacement命令的结尾
当{replacement}以
\=
开头时,它将作为表达式进行计算。
因为字符串不是表达式,所以需要printf来输出字符串的第一部分。这两个函数
printf
strftime
然后通过

连接在一起,autocmd具有
*.h
,示例文件是
test.cpp
。这只是你的例子吗?如果是,请更新问题以避免混淆。我也更新了我的答案以使用
.h
文件。