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

EditPad Lite有一个很好的function( CTRLECTRLI ),它在你的代码中插入一个时间戳,例如“2008-09-11 10:34:53”。

在Vim中获得这个function的最好方法是什么?

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

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 

要使其跨平台工作,只需在vimrc以下内容:

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

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

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

作为@Swaroop CH的回答的延伸,

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

是一个更紧凑的forms,也将打印时区(实际上与UTC,符合ISO-8601标准的forms的差异)。

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

 :r !date --rfc-3339=s 

会给你一个完整的RFC-3339兼容的时间戳; 使用ns而不是s来获得类Spock的精度,并且通过tr ' ' T来使用大写字母T来代替date和时间之间的空格。

你也许会发现知道这个很有用

 :source somefile.vim 

将读取来自somefile.vim命令:通过这种方式,您可以设置一组自定义的映射等,然后在您使用该帐户的vim时加载它。

为什么大家都在使用:r! ? find一个空行,并从命令模式键入!!date 。 保存击键!

[nb这会将当前行传入stdin,然后用命令输出replace该行; 因此“find一条空白线”部分。]

看看专门用于 vim.wikia上的时间戳插入/更新的提示。

,R! date

然后你可以添加格式到date命令(mandate),如果你想要完全相同的格式,并添加这个vim别名以及

,R! date+“\%Y – \%m – \%d \%H:\%M:\%S”

这产生了你在例子中显示的格式(shell中的date不使用\%,而只是%,vim用当前文件的名称replace%,所以你需要将其转义)。

您可以在.vimrc中添加一个地图来自动放置该命令,例如,每次按下F3:

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

(编辑从上面:))(编辑:改变文字部分代码,这样的

 <F3> 

可以显示)

对于一个unix时间戳:

 ,R! date+ \%s

您也可以将此命令映射到VIM中的某个键(例如F12),如果您使用它的话:

把它放在你的.vimrc中:

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

时间戳脚本

以前的答案不包括的另一种快捷方式是:

!!date

来自Vim Wikia 。

我用这个而不是必须移动我的手来打F键:

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

现在在插入模式下,只需键入tds,一旦我点击空格键或返回,我就会得到date并继续input。

我把%b放在那里,因为我喜欢看月份的名字。 %F给了我一些按datesorting的东西。 我可能会把它改成%Y%m%d所以单位之间没有字符。

Unix的使用:

 !!date 

Windows使用:

 !!date /t 

更多细节:请参阅Insert_current_date_or_time