Лучший способ вставить временную метку в Vim?

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

Как расширение ответа @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 в этой учетной записи.

Ответ 5

: г! дата

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

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

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

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

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

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

<F3> 

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

Ответ 7

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

:r! date +\%s

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

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


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

Ответ 9

Из Vim Wikia.

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

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

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

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

Ответ 10

Еще один быстрый способ, не включенный в предыдущие ответы: type -

!! дата

Ответ 11

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

!!date

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

!!date /t

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

Ответ 12

Я хотел, чтобы пользовательская команда :Date (а не отображение клавиш) вставляла дату в текущую позицию курсора.

К сожалению, простые команды, такие как r!date, приводят к новой строке. Итак, наконец, я придумал следующее:

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

которая добавляет строку даты/времени в позицию курсора без добавления новой строки (измените на normal a добавить после позиции курсора).