vim 建立文件自动生成头部注释

知识点: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