我想让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中触发对换行的操作?
答案 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>