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

时间:2013-12-19 01:56:40

标签: vim

我想让Vim在每次创建新行时插入时间戳。从Best way to insert timestamp in 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>

可能我只能将 Enter 映射到此,而不是 F3 ;但是,这是一个kludge(例如,我可以按 Ctrl M )。有没有办法在Vim中触发对换行的操作?

2 个答案:

答案 0 :(得分:1)

<CR><Enter><C-M>都是Vim中的同义词。因此,定义此映射就足够了:

:imap <buffer> <CR> <CR><C-R>=strftime("%Y-%m-%d %a %I:%M %p ")<CR>

我选择了一个缓冲区本地映射,因为您可能只想要某些文件类型。您可以通过预先添加:autocmd Filetype <filetype> ...来定义某些文件类型,并将其放入~/.vimrc。但是,当您为各种文件类型添加映射和其他设置时,这会变得笨拙。最好将命令放入~/.vim/ftplugin/<filetype>_mappings.vim。 (这要求您拥有:filetype plugin on。)

这仍然不会涵盖粘贴的文字。我怀疑你真的想要那个(最好在之后添加时间戳),但你可以查看(最近添加的)TextChanged事件来实现它。

答案 1 :(得分:0)

我建议使用缩写来插入时间戳,以下是我~/.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>