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

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

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

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

13 ответов

Решение

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

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

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

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

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

:р! Дата

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

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

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

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

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

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

<F3> 

можно отобразить)

Ознакомьтесь с советами по вставке / обновлению меток времени на vim.wikia.

От Вим Викия.

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

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

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

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

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

!!date

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

!!date /t

Более подробная информация: см. http://vim.wikia.com/wiki/Insert_current_date_or_time

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

:р! дата +\%s

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

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


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

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

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

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

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

Я использую vi в Eterm по причинам, и оказалось, что функция strftime() недоступна в vi.

Долго и упорно боролся и наконец придумал это:

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

Результат: 02.02.2021 16:45

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

Бонус:

vi не читает ~/.vimrc, он читает ~/.exrc

Кроме того, вот как это выглядит в vim/.vimrc:

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

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

!!Дата

Другие вопросы по тегам