在 Vim 中用当前日期和时间替换模板字符串

在 Vim 中用当前日期和时间替换模板字符串

我有一个包含以下字符串的模板文件:

{{date}} {{time24}} Some text.

我想{{date}} {{time}}用键盘映射上的当前日期和时间替换。

我目前有:

:nnoremap <leader>d :%s@{{date}} {{time24}}@\=system('/path/to/script.sh')@<CR><CR>

在脚本中,我有:

#!/bin/bash
date "+%Y-%m-%d %H:%M" | tr -d '\n'

我遇到的问题是这会从我的 中引入文本.bashrc

有没有办法从 vim 内部完成这一点,或者有更简单的方法来完成这一点?

答案1

或者你可以在一个地方完成所有操作:

nnoremap <leader>d :s/{{date}}\s*{{time24}}/\=strftime("%Y.%m.%d %H:%M:%S")<CR>

在哪里…

  • 你不需要维护单独的脚本,
  • :source避免使用脚本的任何潜在副作用(延迟、不存在的文件、自动命令等),
  • 你只使用一个替代品,
  • 并调用一次strftime()

答案2

我创建了一个 vimscript 文件(foo.txt),其中包含以下文本:

:s/{{date}}/\=strftime("%Y%m%d")/

:s/{{time24}}/\=strftime("%H:%M:%S")/

这两个命令是 sed 命令,它们将模板字符串替换为字符串格式的时间,该格式由标准日期和时间变量指定。第一个命令涵盖日期;第二个命令涵盖时间。

我已将键盘映射更改为以下内容:

:nnoremap <leader>d :source! /path/to/foo.vim<CR>

在这里,在正常模式下,我在输入我的键绑定时触发非递归重映射,在本例中leader d为 ,d代表日期。此键绑定执行源命令,该命令执行上面给出的脚本,然后按顺序执行每个命令,首先替换日期,然后替换时间。

现在日期和时间已替换,没有问题。

相关内容