EditPad Lite 有一个很好的功能(CTRL- E,CTRL- I),它可以在您的代码中插入一个时间戳,例如“2008-09-11 10:34:53”。
在 Vim 中获得此功能的最佳方法是什么?
(我通过 SSH 在 Linux 服务器上使用 Vim 6.1。在当前情况下,我们中的许多人共享一个登录名,所以如果有另一种内置方法来获取时间戳,我不想在主目录中创建缩写。 )
要使其跨平台工作,只需将以下内容放入您的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
插入到光标处一样。
有关可用参数的完整描述,请查看C 函数 strftime() 的文档。
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
为什么大家都在用:r!
?!!date
从命令模式中找到一个空行并键入。节省击键!
[nb 这会将当前行通过管道传输到标准输入,然后用命令输出替换该行;因此“查找空行”部分。]
: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>
可以显示)
作为@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 时加载它。
来自Vim 维基。
我使用它而不是移动我的手来按下 F 键:
:iab <expr> tds strftime("%F %b %T")
现在在插入模式下,它只需输入 tds,只要我按下空格键或返回,我就会得到日期并继续输入。
我把它%b
放在那里,因为我喜欢看到月份的名字。这%F
给了我一些按日期排序的东西。我可能会将其更改%Y%m%d
为单位之间没有字符。
对于 unix 时间戳:
:r!日期 +\%s
如果你经常使用它,你也可以将此命令映射到 VIM 中的一个键(例如 F12):
把它放在你的 .vimrc 中:
map <F12> :r! date +\%s<cr>
我想要一个自定义命令:Date
(不是键映射)在当前光标位置插入日期。
不幸的是,像这样直接r!date
的命令会导致换行。所以最后我想出了以下几点:
command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"
它在光标位置添加日期/时间字符串而不添加任何新行(更改为normal a
在光标位置之后添加)。
先前答案未包含的另一种快速方法:type-
!!日期
我在 Eterm 中使用 vi 的原因是 strftime() 在 vi 中不可用。
苦苦挣扎,终于得出了这个结论:
map T :r! date +"\%m/\%d/\%Y \%H:\%M" <CR>"kkddo<CR>
结果:02/02/2021 16:45
出于某种原因,单独添加日期时间会导致日期时间上方有一个空白行,并且光标设置在日期时间行上。
日期 +"[等]" <CR> | 输入日期时间 |
“kk | 向上移动两行 |
dd | 删除日期时间上方的行 |
o <CR> | 在时间下方打开一行并添加回车(换行) |
奖金:
vi 不读取 ~/.vimrc,它读取 ~/.exrc
此外,这也是它在 vim/.vimrc 中的样子:
map T "=strftime("%m/%d/%y %H:%M")<CR>po<CR>