Лучший способ вставить метку времени в Vim? - PullRequest
80 голосов
/ 11 сентября 2008

EditPad Lite имеет приятную функцию ( CTRL - E , CTRL - I ), которая вставляет отметку времени, например, «2008-09-11 10:34:53» в ваш код.

Каков наилучший способ получить эту функциональность в Vim?

(Я использую Vim 6.1 на сервере Linux через SSH. В текущей ситуации некоторые из нас используют один и тот же логин, поэтому я не хочу создавать сокращения в домашнем каталоге, если есть другой встроенный способ получить отметка времени.)

Ответы [ 11 ]

102 голосов
/ 12 сентября 2008

Чтобы он работал кроссплатформенно, просто введите в 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>

Теперь вы можете просто нажать F3 в любое время внутри Vi / Vim, и вы получите метку времени, например 2016-01-25 Mo 12:44, вставленную в курсор.

Для полного описания доступных параметров обратитесь к документации функции C strftime () .

76 голосов
/ 11 сентября 2008

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
12 голосов
/ 07 октября 2011

Почему все используют :r!? Найдите пустую строку и введите !!date в командном режиме. Сохранить нажатие клавиши!

[n.b. Это передаст текущую строку в стандартный ввод, а затем заменит строку выводом команды; отсюда и часть "найди пустую строку".]

9 голосов
/ 05 июня 2010

В качестве дополнения к ответу @Swaroop C H,

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

- это более компактная форма, которая также будет печатать часовой пояс (на самом деле это отличие от UTC в форме, соответствующей стандарту ISO-8601).

Если по какой-либо причине вы предпочитаете использовать внешний инструмент,

:r !date --rfc-3339=s

предоставит вам полную временную метку, соответствующую RFC-3339; используйте ns вместо s для точности, подобной Споку, и пройдите через tr ' ' T, чтобы использовать заглавную букву T вместо пробела между датой и временем.

Также вам может быть полезно знать, что

:source somefile.vim

будет читать команды из somefile.vim: таким образом, вы можете настроить пользовательский набор сопоставлений и т. Д., А затем загрузить его при использовании vim для этой учетной записи.

8 голосов
/ 11 сентября 2008

: г! дата

Затем вы можете добавить формат к команде даты (man date), если вы хотите точно такой же формат, и добавить его как псевдоним vim

: г! дата + "\% Y - \% m - \% d \% H: \% M: \% S"

Это формат, который вы показали в своем примере (дата в оболочке не использует \%, а только%, vim заменяет% на имя текущего файла, поэтому вам нужно его экранировать).

Вы можете добавить карту в свой .vimrc, чтобы она автоматически помещала команду, например, каждый раз, когда вы нажимаете F3:

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

(отредактировано сверху :)) (Изменить: изменить текстовую часть на код, так что

<F3> 

может отображаться)

7 голосов
/ 18 сентября 2008

Посмотрите на совет, посвященный вставке / обновлению отметки времени на vim.wikia.

4 голосов
/ 11 сентября 2008

Для отметки времени Unix:

:r! date +\%s

Вы также можете сопоставить эту команду клавише (например, F12) в VIM, если вы часто ее используете:

Поместите это в свой .vimrc:


map  <F12> :r! date +\%s<cr>
2 голосов
/ 03 ноября 2009
1 голос
/ 22 марта 2014

Из Vim Wikia .

Я использую это вместо того, чтобы двигать рукой, чтобы нажать клавишу F:

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

Теперь в режиме вставки он просто набирает tds, и как только я нажимаю пробел или возвращаюсь, я получаю дату и продолжаю печатать.

Я положил туда %b, потому что мне нравится видеть название месяца. %F дает мне что-то отсортировать по дате. Я мог бы изменить это на %Y%m%d, чтобы между единицами не было символов.

0 голосов
/ 19 июля 2014

Unix, использование:

!!date

Windows, используйте:

!!date /t

Подробнее: см. Insert_current_date_or_time

...