知識點:html
1. autocmd命令: 當讀寫一個文件時,自動執行指定的命令;python
2. autocmd event: BufNewFile 當文件不存在時開始寫文件;git
3. exec命令
execute命令 將一個字符串當作vimscript命令執行
4. g命令
:[range]global/{pattern}/{command}
global命令在[range]指定的文本範圍內(缺省爲整個文件)查找{pattern},而後對匹配到的行執行命令{command},若是要對沒匹配上的行執行命令,則使用global!或vglobal命令。
5. s命令
:[range]s/pattern/string/[c,e,g,i]
c 表示每次替換前會詢問
e 表示不顯示error
g 表示替換全部匹配項
i 表示不區分大小寫github
實例詳解:vim
1 "在新建文件的頭部註釋中自動添加文件的建立時間 2 fun CreatedTime() 3 "exe "1," . l . "g/Created Time:.*/s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T") 4 "exe "g/Created Time:.*/s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T") 5 exe "g/Created Time:.*/s//Created Time:" .strftime("%Y-%m-%d %T") 6 "exe "1," . l . "s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T") 7 endfun
分別對如下四種命令(相同的做用)進行詳細說明:spa
1. exe "1," . l . "g/Created Time:.*/s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T")
"1,".l --- 假設l=30, 那麼表示range爲1-30,即在文件的1-30進行查找匹配
g/Created Time:.* --- 表示g/{pattern},即在1-30行查找"Created Time:.*",若是找到了,則執行後面的command
s/Created Time:.*/Created Time:". strftime("%Y-%m-%d %T") --- 表示 {command},即執行s命令進行替換
因此,該組合命令的做用就是 在1至l行中匹配"Created Time:.*",而後替換成"Created Time:".strftime("%Y-%m-%d %T)
2. exe "g/Created Time:.*/s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T")
由於不指定[range],g命令的搜索範圍模式是整個文件,因此這條命名省去了指定行數範圍
3. exe "g/Created Time:.*/s//Created Time:" .strftime("%Y-%m-%d %T")
功能同上
4. exe "1," . l . "s/Created Time:.*/Created Time:" .strftime("%Y-%m-%d %T")
僅用s命令進行在指定range內替換
綜上所述,能夠結果exec命令,g命令,s命令對新建文件的頭部註釋中的指定部分進行動態寫入.net
autocmd BufNewFile *.py 0r ~/.vim/vim_templation/vim_python_header autocmd BufNewFile *.py,*.[ch],*.sh ks|call CreatedTime()|'s
"autocmd BufNewFile *.py 0r ~/.vim/vim_templation/vim_python_header
"0r 表示重新建文件的第一行開始讀入code
~/.vim/vim_templation/vim_python_header 表示從該文件中讀入內容寫入新建文件,而這個文件就是所謂的skeleton templatehtm
完整的配置及模板:blog
https://github.com/suonikeyinsuxiao/trunk/tree/master/tool/vim