在Vim中插入时间戳的最佳方法?

时间:2008-09-11 08:41:57

标签: vim vi

EditPad Lite有一个很好的功能( CTRL - E CTRL - I ),它插入一个时间邮票,例如“2008-09-11 10:34:53”进入你的代码。

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

(我通过SSH在Linux服务器上使用Vim 6.1。在目前的情况下,我们中的许多人共享一个登录名,所以如果还有其他内置方法可以获得主目录中的缩写时间戳。)

13 个答案:

答案 0 :(得分:102)

要使其跨平台工作,只需将以下内容放入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这样的时间戳。

有关可用参数的完整说明,请查看documentation of the C function strftime()

答案 1 :(得分:76)

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

答案 2 :(得分:12)

为什么每个人都使用:r!?找到一个空行并从命令模式键入!!date。保存按键!

[n.b。这会将当前行传递给stdin,然后用命令输出替换该行;因此,“找到一个空白行”部分。]

答案 3 :(得分: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时加载它。

答案 4 :(得分:7)

,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> 

可以显示)

答案 5 :(得分:7)

请查看vim.wikia上专用to time stamp insertion/update的提示。

答案 6 :(得分:4)

对于unix时间戳:

:r! date +\%s

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

将它放在.vimrc中:


map  <F12> :r! date +\%s<cr>

答案 7 :(得分:2)

答案 8 :(得分:1)

来自Vim Wikia

我使用它而不是移动我的手来击中F键:

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

现在处于插入模式,它只需输入tds,当我点击空格键或返回时,我会得到日期并继续输入。

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

答案 9 :(得分:0)

以前答案中未包含的另一种快捷方式:输入 -

!!日期

答案 10 :(得分:0)

的Unix,使用:

!!date

Windows,使用:

!!date /t

更多详情:请参阅Insert_current_date_or_time

答案 11 :(得分:0)

我希望使用自定义命令:Date(而不是键映射)将日期插入当前光标位置。

不幸的是,诸如r!date之类的简单命令导致换行。所以最后我想到了以下内容:

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

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

答案 12 :(得分:0)

出于某些原因,我在 Eterm 中使用了 vi,但事实证明 strftime() 在 vi​​ 中不可用。

苦苦挣扎,终于想出了这个:

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

结果:02/02/2021 16:45

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

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

奖励:

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

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

map T  "=strftime("%m/%d/%y %H:%M")<CR>po<CR>