如何使用BufWritePre更新我的cpp注释

时间:2019-05-22 00:18:45

标签: vim

我在.vimrc中放入了一些代码,以自动更新.cpp和.h文件文档中的“最新更新”字段。

我已经尝试将其用于.py文件,并且可以正常工作。问题是搜索以字符* Last Update开头的行。这是我到目前为止的内容:

我的cpp文件中的注释

/**
 * @file  test.cpp
 * @author  John Doe
 * @version
 * @brief
 * @date
 *  Created:  21 mai 2019
 *  Last Update:
 */

和我的.vimrc

autocmd BufWritePre *.h exe "%s/^ \*  Last Update:.*$/Last Update: " 
      \. strftime("%d %b %Y (%T)") . "/e"

这会将评论更新为:

/**
 * @file  test.cpp
 * @author  John Doe
 * @version
 * @brief
 * @date
 *  Created:  21 mai 2019
 *  Last Update:  21 mai 2019 (21:15:48)
 */

但是我什么都没有改变。

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

1 个答案:

答案 0 :(得分:0)

已更新,可使用.cpp .h文件

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

autocmd FileType cpp,h autocmd BufWritePre <buffer> :%s/^ \*  Last Update:.*$/\=printf(' *  Last Update: ') . strftime("%d %b %Y (%T)")/e

autocmd FileType cpp,h

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

autocmd BufwritePre <buffer>

  • 写入当前缓冲区

:%s/^ \* Last Update:.*$/

  • 这是替换命令的开始,其中说明了要替换的模式

\=printf(' * Last Update: ') . strftime("%d %b %Y (%T)")/e

  • 这是{replacement}和替换命令的结尾

当{replacement}以\=开头时,它将被视为表达式。 由于字符串不需要表达式printf来输出字符串的第一部分。然后通过printf将两个函数strftime.串联起来。