Лучший способ вставить метку времени в 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>
Еще один быстрый способ, не включенный в предыдущие ответы:
!!Дата