EditPad Lite有一个很好的功能( CTRL - E , CTRL - I ),它插入一个时间邮票,例如“2008-09-11 10:34:53”进入你的代码。
在Vim中获得此功能的最佳方法是什么?
(我通过SSH在Linux服务器上使用Vim 6.1。在目前的情况下,我们中的许多人共享一个登录名,所以如果还有其他内置方法可以获得主目录中的缩写时间戳。)
答案 0 :(得分:102)
要使其跨平台工作,只需将以下内容放入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>
现在你可以随时在Vi / Vim内按F3,你会在光标处插入2016-01-25 Mo 12:44
这样的时间戳。
有关可用参数的完整说明,请查看documentation of the C function strftime()。
答案 1 :(得分:76)
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
答案 2 :(得分:12)
为什么每个人都使用:r!
?找到一个空行并从命令模式键入!!date
。保存按键!
[n.b。这会将当前行传递给stdin,然后用命令输出替换该行;因此,“找到一个空白行”部分。]
答案 3 :(得分:9)
作为@Swaroop C H答案的延伸,
^R=strftime("%FT%T%z")
是一种更紧凑的形式,它也会打印时区(实际上与UTC的差异,符合ISO-8601标准)。
如果您出于某种原因更喜欢使用外部工具,
:r !date --rfc-3339=s
将为您提供完整的RFC-3339兼容时间戳;使用ns
而不是s
来表示类似Spock的精度,并通过tr ' ' T
管道使用大写T而不是日期和时间之间的空格。
您也可能会发现知道
很有用:source somefile.vim
将读取来自somefile.vim
的命令:这样您就可以设置一组自定义映射等,然后在该帐户上使用vim时加载它。
答案 4 :(得分:7)
,R!日期
如果你想要完全相同的格式,你可以在date命令(man date)中添加格式,并将其添加为vim别名
,R!日期+“\%Y - \%m - \%d \%H:\%M:\%S”
这会生成您在示例中显示的格式(shell中的日期不使用\%,但只是%,vim将%替换为当前文件的名称,因此您需要将其转义)。
您可以在.vimrc中添加一个地图,以便它自动放置命令,例如,每次按F3:
:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>
(从上面编辑:)) (编辑:将文本部分更改为代码,以便
<F3>
可以显示)
答案 5 :(得分:7)
请查看vim.wikia上专用to time stamp insertion/update的提示。
答案 6 :(得分:4)
对于unix时间戳:
:r! date +\%s
如果你经常使用它,你也可以将这个命令映射到VIM中的一个键(例如F12):
将它放在.vimrc中:
map <F12> :r! date +\%s<cr>
答案 7 :(得分:2)
答案 8 :(得分:1)
来自Vim Wikia。
我使用它而不是移动我的手来击中F键:
:iab <expr> tds strftime("%F %b %T")
现在处于插入模式,它只需输入tds,当我点击空格键或返回时,我会得到日期并继续输入。
我把%b
放在那里,因为我喜欢看月份名称。 %F
给了我按日期排序的东西。我可能会将其更改为%Y%m%d
,因此单位之间没有字符。
答案 9 :(得分:0)
以前答案中未包含的另一种快捷方式:输入 -
!!日期
答案 10 :(得分:0)
答案 11 :(得分:0)
我希望使用自定义命令:Date
(而不是键映射)将日期插入当前光标位置。
不幸的是,诸如r!date
之类的简单命令导致换行。所以最后我想到了以下内容:
command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"
这将在光标位置添加日期/时间字符串,而不添加任何新行(在光标位置之后更改为normal a
添加)。
答案 12 :(得分:0)
出于某些原因,我在 Eterm 中使用了 vi,但事实证明 strftime() 在 vi 中不可用。
苦苦挣扎,终于想出了这个:
map T :r! date +"\%m/\%d/\%Y \%H:\%M" <CR>"kkddo<CR>
结果:02/02/2021 16:45
出于某种原因,单独添加日期时间会导致在日期时间上方出现一个空行,并且光标设置在日期时间行上。 >
日期 +"[etc]" |
输入日期时间 |
"kk | 向上移动两行 |
dd | 删除日期时间上方的行 |
o |
在时间下方打开一行并添加回车(换行) |
奖励:
vi 不读取 ~/.vimrc,它读取 ~/.exrc
此外,这是 vim/.vimrc 中的样子:
map T "=strftime("%m/%d/%y %H:%M")<CR>po<CR>