Best way to insert timestamp in Vim?

VimVi

Vim Problem Overview


EditPad Lite has a nice feature (CTRL-E, CTRL-I) which inserts a time stamp e.g. "2008-09-11 10:34:53" into your code.

What is the best way to get this functionality in Vim?

(I am using Vim 6.1 on a Linux server via SSH. In the current situation a number of us share a login so I don't want to create abbreviations in the home directory if there is another built-in way to get a timestamp.)

Vim Solutions


Solution 1 - Vim

To make it work cross-platform, just put the following in your 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>

Now you can just press F3 any time inside Vi/Vim and you'll get a timestamp like 2016-01-25 Mo 12:44 inserted at the cursor.

For a complete description of the available parameters check the documentation of the C function strftime().

Solution 2 - Vim

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

Tried it out, it works on my mac:

:r! date

produces:

Thu Sep 11 10:47:30 CEST 2008

This:

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

produces:

2008-09-11 10:50:56

Solution 3 - Vim

Why is everybody using :r!? Find a blank line and type !!date from command-mode. Save a keystroke!

[n.b. This will pipe the current line into stdin, and then replace the line with the command output; hence the "find a blank line" part.]

Solution 4 - Vim

:r! date

You can then add format to the date command (man date) if you want the exact same format and add this as a vim alias as well

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

That produces the format you showed in your example (date in the shell does not use %, but just %, vim replaces % by the name of the current file, so you need to escape it).

You can add a map in your .vimrc for it to put the command automatically, for instance, each time you press F3:

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

(Edited the from above :) ) (Edit: change text part to code, so that

<F3> 

can be displayed)

Solution 5 - Vim

As an extension to @Swaroop C H's answer,

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

is a more compact form that will also print the time zone (actually the difference from UTC, in an ISO-8601-compliant form).

If you prefer to use an external tool for some reason,

:r !date --rfc-3339=s

will give you a full RFC-3339 compliant timestamp; use ns instead of s for Spock-like precision, and pipe through tr ' ' T to use a capital T instead of a space between date and time.

Also you might find it useful to know that

:source somefile.vim

will read in commands from somefile.vim: this way you could set up a custom set of mappings, etc., and then load it when you're using vim on that account.

Solution 6 - Vim

From the Vim Wikia.

I use this instead of having to move my hand to hit an F key:

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

Now in Insert mode it just type tds and as soon as I hit the space bar or return, I get the date and keep typing.

I put the %b in there, because I like seeing the month name. The %F gives me something to sort by date. I might change that to %Y%m%d so there are no characters between the units.

Solution 7 - Vim

For a unix timestamp:

:r! date +%s
You can also map this command to a key (for example F12) in VIM if you use it a lot:

Put this in your .vimrc:


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

Solution 8 - Vim

Unix,use:
!!date
Windows, use:
!!date /t
More details:see Insert_current_date_or_time

Solution 9 - Vim

I wanted a custom command :Date (not a key mapping) to insert the date at the current cursor position.

Unfortunately straightforward commands like r!date result in a new line. So finally I came up with the following:

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

which adds the date/time string at the cursor position without adding any new line (change to normal a add after the cursor position).

Solution 10 - Vim

Another quick way not included by previous answers: type-

!!date

Solution 11 - Vim

I'm using vi in an Eterm for reasons and it turns out that strftime() is not available in vi.

Fought long and hard and finally came up with this:

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

Result: 02/02/2021 16:45

For some reason, adding the date-time alone resulted in a blank line above the date-time and the cursor set on the date-time line.

date +"[etc]" Enters the date-time
"kk Moves up two lines
dd Deletes the line above the date-time
o Opens a line below the time and adds a carriage return (linefeed)

Bonus:

vi doesn't read ~/.vimrc, it reads ~/.exrc

Also, this is how it looks in vim/.vimrc:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEdward TanguayView Question on Stackoverflow
Solution 1 - VimSwaroop C HView Answer on Stackoverflow
Solution 2 - VimDaren ThomasView Answer on Stackoverflow
Solution 3 - Vimluser droogView Answer on Stackoverflow
Solution 4 - VimVinko VrsalovicView Answer on Stackoverflow
Solution 5 - VimintuitedView Answer on Stackoverflow
Solution 6 - Vimuser3449771View Answer on Stackoverflow
Solution 7 - VimfijterView Answer on Stackoverflow
Solution 8 - Vimbyte-pirateView Answer on Stackoverflow
Solution 9 - VimluatorView Answer on Stackoverflow
Solution 10 - VimlukmacView Answer on Stackoverflow
Solution 11 - VimmmrtntView Answer on Stackoverflow