97

EditPad Lite 有一个很好的功能(CTRL- ECTRL- I),它可以在您的代码中插入一个时间戳,例如“2008-09-11 10:34:53”。

在 Vim 中获得此功能的最佳方法是什么?

(我通过 SSH 在 Linux 服务器上使用 Vim 6.1。在当前情况下,我们中的许多人共享一个登录名,所以如果有另一种内置方法来获取时间戳,我不想在主目录中创建缩写。 )

4

11 回答 11

122

要使其跨平台工作,只需将以下内容放入您的vimrc:

nmap <F3> i<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

现在你可以随时在 Vi/Vim 中按 F3 键,你会得到一个时间戳,就像2016-01-25 Mo 12:44插入到光标处一样。

有关可用参数的完整描述,请查看C 函数 strftime() 的文档

于 2008-09-12T10:13:57.647 回答
92

http://kenno.wordpress.com/2006/08/03/vim-tip-insert-time-stamp/

试了一下,它在我的mac上工作:

:r! date

产生:

Thu Sep 11 10:47:30 CEST 2008

这:

:r! date "+\%Y-\%m-\%d \%H:\%M:\%S"

产生:

2008-09-11 10:50:56
于 2008-09-11T08:45:50.843 回答
17

为什么大家都在用:r!!!date从命令模式中找到一个空行并键入。节省击键!

[nb 这会将当前行通过管道传输到标准输入,然后用命令输出替换该行;因此“查找空行”部分。]

于 2011-10-06T22:19:12.863 回答
9

:r!日期

然后,如果您想要完全相同的格式,则可以将格式添加到 date 命令(man date),并将其添加为 vim 别名

:r!日期+"\%Y-\%m-\%d\%H:\%M:\%S"

这会产生您在示例中显示的格式(shell 中的日期不使用 \%,而只是 %,vim 将 % 替换为当前文件的名称,因此您需要对其进行转义)。

您可以在 .vimrc 中添加一个映射,以便它自动放置命令,例如,每次按 F3 时:

:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>

(从上面编辑:))(编辑:将文本部分更改为代码,以便

<F3> 

可以显示)

于 2008-09-11T08:48:17.237 回答
9

作为@Swaroop C H 答案的扩展,

^R=strftime("%FT%T%z")

是一种更紧凑的形式,它也将打印时区(实际上是与 UTC 的差异,采用符合 ISO-8601 的形式)。

如果您出于某种原因更喜欢使用外部工具,

:r !date --rfc-3339=s

将为您提供完整的 RFC-3339 兼容时间戳;使用ns而不是s类似 Spock 的精度,并通过管道tr ' ' T使用大写 T 而不是日期和时间之间的空格。

此外,您可能会发现知道这一点很有用

:source somefile.vim

将从中读取命令somefile.vim:这样您可以设置一组自定义映射等,然后在您在该帐户上使用 vim 时加载它。

于 2010-06-05T04:26:18.380 回答
6

来自Vim 维基

我使用它而不是移动我的手来按下 F 键:

:iab <expr> tds strftime("%F %b %T")

现在在插入模式下,它只需输入 tds,只要我按下空格键或返回,我就会得到日期并继续输入。

我把它%b放在那里,因为我喜欢看到月份的名字。这%F给了我一些按日期排序的东西。我可能会将其更改%Y%m%d为单位之间没有字符。

于 2014-03-22T13:28:55.973 回答
4

对于 unix 时间戳:

:r!日期 +\%s

如果你经常使用它,你也可以将此命令映射到 VIM 中的一个键(例如 F12):

把它放在你的 .vimrc 中:


map  <F12> :r! date +\%s<cr>
于 2008-09-11T08:51:26.557 回答
4

Unix,使用:

!!date

窗户,使用:

!!date /t

更多细节:见Insert_current_date_or_time

于 2014-07-19T11:44:38.887 回答
1

我想要一个自定义命令:Date(不是键映射)在当前光标位置插入日期。

不幸的是,像这样直接r!date的命令会导致换行。所以最后我想出了以下几点:

command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"

它在光标位置添加日期/时间字符串而不添加任何新行(更改为normal a在光标位置之后添加)。

于 2019-09-04T13:06:56.780 回答
0

先前答案未包含的另一种快速方法:type-

!!日期

于 2012-07-04T08:55:46.460 回答
0

我在 Eterm 中使用 vi 的原因是 strftime() 在 vi​​ 中不可用。

苦苦挣扎,终于得出了这个结论:

map T :r! date +"\%m/\%d/\%Y \%H:\%M" <CR>"kkddo<CR>

结果:02/02/2021 16:45

出于某种原因,单独添加日期时间会导致日期时间上方有一个空白行,并且光标设置日期时间行上。

日期 +"[等]" <CR> 输入日期时间
“kk 向上移动两行
dd 删除日期时间上方的行
o <CR> 在时间下方打开一行并添加回车(换行)

奖金:

vi 不读取 ~/.vimrc,它读取 ~/.exrc

此外,这也是它在 vim/.vimrc 中的样子:

map T  "=strftime("%m/%d/%y %H:%M")<CR>po<CR>
于 2021-02-03T04:00:13.600 回答