Как обновить мои комментарии cpp, используя BufWritePre - PullRequest
3 голосов
/ 22 мая 2019

Я помещаю некоторый код в мой .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 голосов
/ 22 мая 2019

Обновлено для работы с .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

  • это {замена} и конец замещающей команды

Когда {замена} начинается с \=, оно оценивается как выражение. Поскольку строка не имеет выражения, printf требуется для вывода первой части строки. Две функции printf и strftime затем объединяются через ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...