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


90

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

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

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

Answers:


87

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

1
只是一点点注意,空格似乎并不是必需的-“:r!date”也可以使用。
乔恩·布林赫斯特

@AB,略过以下问题:stackoverflow.com/questions/15394572/…,看来您可以使用反斜杠进行转义。你能帮我试试吗?
达伦·托马斯

3
完全可以。编写它的其他方法是:r!date "+\%F \%T":r!date +\%F\ \%T
chrisfargen

去把它放在我的vimrc中...然后注意到我已经把它放在很久以前了。效果很好。
mgjk

在我的软呢帽31上像吊饰一样工作。谢谢。
rchrd

114

要使其跨平台工作,只需将以下内容放入您的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()文档


有没有一种方法可以在整个系统范围内(在Linux中)?
尼龙

有没有一种方法可以使用此时间戳创建或保存文件作为文件名?
尼龙

谢谢,因为F3已经用于其他用途。我在正常模式下:Date通过将以下内容添加到~/.vimrc配置文件中来定义了一个自定义命令:command! Date put =strftime('%Y-%m-%d')。它在新行上插入日期。没有制作没有换行符的版本。
Paul Rougieux

13

为什么每个人都在使用:r!?找到一个空行,然后!!date从命令模式下键入。保存击键!

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


9

作为@Swaroop CH的答案的扩展,

^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时将其加载。


strftime()是vim中的一个函数。您也可以使用:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis 2016年

在我的机器上(Windows 7,gvim 8.0.69),%F和%T说明符不起作用,但是%Y-%m-%d和%H:%M:%S起作用。(根据cplusplus.com/reference/ctime/strftime,%F和%T附带了C99的strftime的更新版本。)此外,%z说明符对时区进行了详尽的描述。
Ed Wynn's

8

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

可以显示)


4

对于Unix时间戳:

:r!日期+ \%s

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

将其放在您的.vimrc中:


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

4

来自Vim Wikia

我用它而不是必须动手敲击F键:

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

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

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




0

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

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

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

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


在执行此操作时,该命令对我而言似乎过于复杂,我觉得应该有一种更好的方法来执行此操作。如果您知道一个,请让我知道:)
luator 19'Sep
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.