Лучший способ вставить метку времени в Vim?
Вопрос
EditPad Lite имеет приятную функцию (CTRL-Э, CTRL-я), который вставляет отметку времени, например.«2008-09-11 10:34:53» в свой код.
Как лучше всего реализовать эту функциональность в Vim?
(Я использую Vim 6.1 на сервере Linux через SSH.В текущей ситуации многие из нас используют один и тот же логин, поэтому я не хочу создавать сокращения в домашнем каталоге, если есть другой встроенный способ получить временную метку.)
Решение
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
из командного режима.Экономьте нажатие клавиши!
[n.b.]Это передаст текущую строку в стандартный ввод, а затем заменит ее выводом команды;отсюда и часть «найти пустую строку».]
В качестве дополнения к ответу @Swaroop CH:
^R=strftime("%FT%T%z")
— это более компактная форма, в которой также будет печататься часовой пояс (фактически разница с UTC в форме, соответствующей ISO-8601).
Если по какой-то причине вы предпочитаете использовать внешний инструмент,
:r !date --rfc-3339=s
предоставит вам полную временную метку, соответствующую RFC-3339;использовать ns
вместо s
для точности, подобной Споку, и сквозной tr ' ' T
использовать заглавную букву Т вместо пробела между датой и временем.
Также вам может быть полезно знать, что
:source somefile.vim
будет читать команды из somefile.vim
:таким образом вы можете настроить собственный набор сопоставлений и т. д., а затем загружать его при использовании vim в этой учетной записи.
:р!дата
Затем вы можете добавить формат к команде даты (man date), если вам нужен точно такой же формат, а также добавить его как псевдоним vim.
:р!дата +"\%Y-\%m-\%d \%H:\%M:\%S"
В результате получается формат, который вы показали в своем примере (дата в оболочке не использует \%, а просто %, vim заменяет % именем текущего файла, поэтому вам нужно экранировать его).
Вы можете добавить карту в свой .vimrc, чтобы она автоматически вводила команду, например, каждый раз, когда вы нажимаете F3:
:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>
(Отредактировал сверху выше :)) (Изменить:измените текстовую часть на код, чтобы
<F3>
можно показать)
Обратите внимание на совет, посвященный для вставки/обновления отметки времени на vim.викиа.
Для временной метки unix:
:r! date +\%s
Вы также можете сопоставить эту команду с клавишей (например, F12) в VIM, если вы ее часто используете:
Поместите это в свой .vimrc:
map <F12> :r! date +\%s<cr>
Из Вим Викия.
Я использую это вместо того, чтобы двигать рукой, чтобы нажать клавишу F:
:iab <expr> tds strftime("%F %b %T")
Теперь в режиме вставки он просто набирает tds, и как только я нажимаю пробел или возвращаюсь, я получаю дату и продолжаю печатать.
я положил %b
там, потому что мне нравится видеть название месяца.А %F
дает мне что-то для сортировки по дате.Я мог бы изменить это на %Y%m%d
поэтому между единицами нет символов.
Еще один быстрый способ, не включенный в предыдущие ответы:тип-
!!дата
Юникс, используйте:
!!date
Windows, используйте:
!!date /t