Найкращий спосіб вставити мітку часу у 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 / ... , здається , що ви можете уникнути за допомогою зворотного косою риси. Чи можете ви спробувати це для мене?
Daren Thomas

3
Цілком працює. Інші способи , щоб написати це є :r!date "+\%F \%T"чи :r!date +\%F\ \%T.
chrisfargen

Пішов покласти це у мій vimrc ... тоді помітив, що я вже поклав його там століття тому. Чудово працює.
mgjk

Працює як шарм на моїй федорі 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)?
найлон

Чи існує метод створення або збереження файлу з цією позначкою часу як імені файлу?
Найлон

Дякую, оскільки 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 Це переведе поточний рядок у stdin, а потім замінить рядок на вивід команди; звідси частина "знайти порожній рядок".]


9

Як продовження відповіді @Swaroop CH,

^R=strftime("%FT%T%z")

є більш компактною формою, яка також буде друкувати часовий пояс (насправді різниця з UTC, у формі, сумісній з ISO-8601).

Якщо ви віддаєте перевагу використовувати зовнішній інструмент з якихось причин,

:r !date --rfc-3339=s

надасть вам повну позначку часу, сумісну з RFC-3339; використовувати nsзамість sSpock-подібної точності, а використовувати tr ' ' Tдля використання великої букви 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

: r! дата

Потім ви можете додати формат до команди date (man date), якщо хочете точно такий же формат, і додати це як псевдонім vim, а також

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

Це створює формат, який ви показали у своєму прикладі (дата в оболонці не використовує \%, а просто%, vim замінює% на ім'я поточного файлу, тому вам потрібно його уникнути).

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

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

(Відредаговано зверху :)) (Редагувати: змінити текстову частину на код, так що

<F3> 

може відображатися)


4

Для мітки часу unix:

: r! дата + \% 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

Ще один швидкий спосіб, не включений у попередні відповіді: type-

!!дата


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.