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


90

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

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

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

Ответы:


87

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

1
Небольшое примечание, пробел, кажется, не нужен - ": r! Date" тоже работает.
Джон Брингхерст,

@AB, просматривая этот вопрос: stackoverflow.com/questions/15394572/… , кажется, вы можете избежать обратной косой черты. Можешь попробовать это для меня?
Дарен Томас

3
Полностью работает. Другие способы написать это :r!date "+\%F \%T"или :r!date +\%F\ \%T.
chrisfargen

Пошел, чтобы поместить это в свой vimrc ... потом заметил, что я уже положил его туда много лет назад. Работает отлично.
mgjk 07

Работает как шарм на моей шляпе 31. Спасибо.
rchrd

115

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


есть ли способ сделать эту систему в целом (в Linux)?
nilon 06

Есть ли способ создать или сохранить файл с этой меткой времени в качестве имени файла?
nilon 05

Спасибо, так как F3 уже используется для чего-то другого. Я определил пользовательскую команду в обычном режиме :Date, добавив следующее в мой ~/.vimrcфайл конфигурации: command! Date put =strftime('%Y-%m-%d'). Дата вставляется в новую строку. не удалось сделать версию без новой строки.
Paul Rougieux

1
@PaulRougieux Следующее предназначено для вставки даты без новой строки:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
UnderBlue592,

13

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

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


9

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


strftime () - это функция внутри vim. Вы также можете использовать:put=strftime(""%FT%T%z")
Антониос Хаджигеоргалис

На моей машине (Windows 7, gvim 8.0.69) спецификаторы% F и% T не работали, но% Y-% m-% d и% H:% M:% S работали. (Согласно cplusplus.com/reference/ctime/strftime,% F и% T поставлялись с обновленной версией strftime для C99.) Кроме того, спецификатор% z дал подробное описание часового пояса.
Эд Винн

8

:р! свидание

Затем вы можете добавить формат к команде даты (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> 

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


4

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

:р! дата + \% s

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

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


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

4

Из Vim Wikia .

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

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

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

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



0

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

!!свидание


0

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

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

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

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


Пока это работает, команда кажется мне слишком сложной, и я чувствую, что должен быть способ сделать это лучше. Если вы знаете кого-то, дайте мне знать :)
luator
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.