在vim中的换行符上插入时间戳

在vim中的换行符上插入时间戳,vim,Vim,我想让Vim在每次写新行时插入一个时间戳。从中可以看出,有一种方法可以在按键上插入时间戳: nmap <F3> a<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> nmap a=strftime(“%Y-%m-%d%a%I:%m%p”) imap=strftim

我想让Vim在每次写新行时插入一个时间戳。从中可以看出,有一种方法可以在按键上插入时间戳:

nmap <F3> a<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>
nmap a=strftime(“%Y-%m-%d%a%I:%m%p”)
imap=strftime(“%Y-%m-%d%a%I:%m%p”)

很可能我可以直接映射到这个,而不是F3;然而,这是一个难题(例如,我可以按CtrlM)。有没有办法在Vim中触发换行操作?

我建议使用缩写插入时间戳,以下是我的
~/.vimrc
的摘录

    " Examples of the Date abbrevations
    "------------------------------------////
    " xdate : Wed 18 Dec 2013 08:23:44 PM CST
    " rdate : Fri, 06 Dec 2013 21:52:35 -0600
    " adate : Dec 06, 2013
    " ldate : 2013-12-06 21:52:52
    " sdate : 2013-12-06

    iab <expr> rdate strftime("%a, %d %b %Y %H:%M:%S %z")
    iab <expr> xdate strftime("%a %d %b %Y %I:%M:%S %p %Z")
    iab adate <C-R>=strftime("%b %d, %Y")<cr>
    iab ldate <C-R>=strftime("%Y-%m-%d %H:%M:%S")<cr>
    iab sdate <C-R>=strftime("%Y-%m-%d")<cr>
日期缩写的示例 "------------------------------------//// “X日期:2013年12月18日星期三下午8:23:44中央标准时间 日期:2013年12月6日星期五21:52:35-0600 “日期:2013年12月6日 “日期:2013-12-06 21:52:52 “sdate:2013-12-06 iab rdate strftime(“%a,%d%b%Y%H:%M:%S%z”) iab xdate strftime(“%a%d%b%Y%I:%M:%S%p%Z”) iab adate=strftime(“%b%d,%Y”) iab ldate=strftime(“%Y-%m-%d%H:%m:%S”) iab sdate=strftime(“%Y-%m-%d”)
都是Vim中的同义词。因此,定义此映射就足够了:

:imap <buffer> <CR> <CR><C-R>=strftime("%Y-%m-%d %a %I:%M %p ")<CR>
:imap=strftime(“%Y-%m-%d%a%I:%m%p”)
我选择了一个缓冲区本地映射,因为您可能只需要对某些文件类型使用它。您可以通过在
:autocmd Filetype…
前面加上前缀来定义某些文件类型的缓冲区本地映射,并将其放入
~/.vimrc
中。但是当您为各种文件类型添加映射和其他设置时,这会变得很麻烦。最好将命令放入中ode>~/.vim/ftplugin/_mappings.vim
(这要求您在
上有
:文件类型插件)


这仍然不能覆盖粘贴的文本。我怀疑您是否真的希望这样做(最好在之后预先添加时间戳),但您可以查看(最近添加的)
TextChanged
事件来实现该功能。

您误解了,我不想在Enter映射中添加Ctrl+M映射。我想在以任何方式将换行插入缓冲区时触发某些内容(例如,如果我在windows上粘贴了可能不会触发Ctrl+M或Enter keymap的内容).现在我已经阅读并理解了你的第二部分,这很好。你认为有什么方法可以像iab“\n”…?对不起,我没有测试它。我将坚持使用缩写词的解决方案。