2013-12-19 164 views
1

我想讓Vim在每次換行時插入一個時間戳。從Best way to insert timestamp in 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> 

可能的我可以映射輸入這一點,而不是F3的;然而,這是一個kludge(例如,我可以按CtrlM)。有沒有辦法在Vim的newline上觸發一個動作?

回答

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> 
+0

您誤解了,我不想將Ctrl + M地圖添加到Enter地圖。我想通過任何方式將新行插入緩衝區時觸發某些事情(例如,如果我在窗口上粘貼了某些可能不會觸發Ctrl + M或Enter鍵圖的東西)。 – CrazyCasta

+0

現在認爲我已經閱讀並理解你的第二部分,這非常好。你認爲會有什麼辦法可以像iab「\ n」...一樣嗎? – CrazyCasta

+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事件來實現它。