Как вставить дату в VIM

23

В vim вы можете выполнять команды с "!". Вы можете комбинировать это с "r", чтобы вставить вывод в ваш текущий буфер.

: r! дата
пт июл 20 09:39:26 SAST 2012

вставит дату в файл.

Теперь, когда я пытаюсь сделать что-то более интересное, например, дату в другом формате +% F. В командной строке

$ date +% F
2012-07-20

В VIM

: r! date "+% F"
message.to.followup.lstF

Который из выводит имя файла и ставит F после него. кое-как, как r! date "+% F" раскрывается в vim и не запускается в командной строке. Что мне нужно сделать, чтобы запустить его, чтобы он помещал содержимое в vim.

Возможно, у vim есть лучший способ вставить даты в файлы.

nelaaro
источник
возможный дубликат: stackoverflow.com/questions/6344750/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Вот еще один правильный ответ, используя <F3>. Вам нужно будет изменить ваш, vimrcчтобы получить любой формат даты, который вам нравится, автоматизированный .
Нильон

Ответы:

21

Vim имеет внутреннюю strftime()функцию. Попробуйте это (в режиме вставки):

<C-r>=strftime('%F')<CR>
Heptite
источник
1
Я выбираю ваш ответ, так как он наиболее эффективен.
nelaaro
1
А в обычном режиме это то же самое (вставить дату в текущей позиции ): "=strftime("%F")<CR>P(Источник: vim.wikia.com/wiki/Insert_current_date_or_time )
Erik
19

Я продолжал экспериментировать, пока не понял, что vim расширяет символ «%». Так что просто избегайте "\%", и все работает так, как я ожидал.

: r! date "+ \% F"
2012-07-20

Теперь я могу поместить даты в файлы, как я хотел бы

: r! date "+ \% F" -d "-2 day"
2012-07-18

nelaaro
источник
1
+1 То, что вы можете использовать с другими программами, чем dateтоже, и, следовательно, его легче запомнить, чем интернат "strftime" - все.
математика
10

Другой метод, без экранирования, использующий system():

system('date +%F')

В режиме INSERT :

<C-r>=system('date +%F')<CR>

В НОРМАЛЬНОМ режиме:

:put=system('date +%F')<CR>
romainl
источник
1
<Cr> очень полезен, я бы хотел потратить больше времени на чтение справки в vim.
nelaaro
1
Никогда не поздно.
romainl