32

In vim you can execute comands with "!". You can combine that with "r" to insert the output into your current buffer.

:r!date
Fri Jul 20 09:39:26 SAST 2012

will insert the date into a file.

Now when I try to do some more interesting stuff like date with different format +%F. On the command line

$ date +%F
2012-07-20

In vim

:r!date "+%F"
message.to.followup.lstF

Which out puts the name of the file and puts F after it. some how the r!date "+%F" is being expanded in vim and not run on the command line. What do I need to do to run that so it puts the contents in vim.

Maybe vim has a better way to insert dates into files.

nelaaro
  • 13,149
  • 30
  • 84
  • 111
  • possible duplicate: http://stackoverflow.com/questions/6344750/how-do-i-insert-current-time-into-a-file-using-vim – Ciro Santilli OurBigBook.com Oct 14 '14 at 08:59
  • Here is another valid response using . You will need to modify your `vimrc` to get [any date format you like, automatized](https://stackoverflow.com/a/58604/6253165). – nilon Sep 05 '19 at 15:20

3 Answers3

31

Vim has an internal strftime() function. Try this (in insert mode):

<C-r>=strftime('%F')<CR>
Heptite
  • 19,383
  • 5
  • 58
  • 71
  • 2
    I am choosing your answer as it the most vim like way to do things. – nelaaro Jul 23 '12 at 07:18
  • 3
    And in **normal mode** this is the same (insert date at **current position**): `"=strftime("%F")P` (Source: http://vim.wikia.com/wiki/Insert_current_date_or_time) – erik Jun 25 '15 at 11:54
21

I kept experimenting till I figured out that vim was expanding the "%" character. So just escape "\%" and every thing works as I expected.

:r!date "+\%F"
2012-07-20

Now I can put dates into files Like I would like to

:r!date "+\%F" -d "-2 day"
2012-07-18

nelaaro
  • 13,149
  • 30
  • 84
  • 111
  • 1
    +1 That you can use with other programs than `date` too, and hence its easier to remember than the internat "strftime"-thing. – math Jul 25 '12 at 07:59
12

Another method, without escaping, using system():

system('date +%F')

In INSERT mode:

<C-r>=system('date +%F')<CR>

In NORMAL mode:

:put=system('date +%F')<CR>
romainl
  • 22,554
  • 2
  • 49
  • 59