Vi and Vim Autocommand: 3 Steps to Add Custom Header To Your File Automatically
Vi and Vim Autocommand: 3 Steps to Add Custom Header To Your File Automatically
In this article, using 3 simple steps, let us review how to use this powerful autocmd feature of Vim to create a header section inside a file (for example, header in a C programming code) with file name, creation date, last modified date/time automatically populated when you open a file in vi.
Vim autocmd syntax:
autocmd {event} {pattern} {cmd}
Events: There are more than 40 autocmd events. Following are few sample autocmd events.
BufNewFile - Starting to edit a file that doesn't exist.
FileReadPre - Before reading a file with a ":read" command.
BufWritePre - Starting to write the whole buffer to a file.
FileWritePre - Starting to write part of a buffer to a file.
BufDelete - Before deleting a buffer from the buffer list.
BufWipeout - Before completely deleting a buffer.
BufNew - Just after creating a new buffer.
BufEnter - After entering a buffer.
BufLeave - Before leaving to another buffer.
SwapExists - Detected an existing swap file.
help autocmd-events // get more information about autocmd events
Most of the developers want some default header for their programs. Lets take an example. When opening a “.c” file, you need a file header which has author, filename etc.. Consider that I need the following template to be loaded automatically while opening a new “.c” file. You can achieve this in three steps as mentioned below.
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : 1.c
* Purpose :
* Creation Date : 22-12-2008
* Last Modified : Mon 22 Dec 2008 10:36:49 PM PST
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/
Step 1: Create a template file
Save the above template in a text file with “:insert” in the first line, followed by the template and a “.”(dot) in the last line as shown below.
$ cat c_header.txt
:insert
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name :
* Purpose :
* Creation Date :
* Last Modified :
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/
.
Step 2: Add autocmd commands to ~/.vimrc
Add the following lines in the ~/.vimrc file.
$ cat ~/.vimrc
autocmd bufnewfile *.c so /home/jsmith/c_header.txt
autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%")
autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y")
autocmd Bufwritepre,filewritepre *.c execute "normal ma"
autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c")
autocmd bufwritepost,filewritepost *.c execute "normal `a"
Step 3: Create a new *.c file with automatic header
Now, when you create a new *.c file using vim, this will automatically add the header defined in the Step1 and populate the File Name and Creation Date automatically as shown below.
$ vi myfile.c
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : myfile.c
* Purpose :
* Creation Date : 20-12-2008
* Last Modified :
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/
When you save the myfile.c file, it will automatically update the Last Modified field accordingly as shown below.
$ vi myfile.c
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : myfile.c
* Purpose :
* Creation Date : 20-12-2008
* Last Modified : Sat 20 Dec 2008 09:37:30 AM PST
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/
Explanation of the autocmd commands inside ~/.vimrc
$ cat -n ~/.vimrc
1 autocmd bufnewfile *.c so /home/jsmith/c_header.txt
2 autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%")
3 autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y")
4 autocmd Bufwritepre,filewritepre *.c execute "normal ma"
5 autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c")
6 autocmd bufwritepost,filewritepost *.c execute "normal `a"
Line 1 defines the template file. This indicates that for *.c file, /home/jsmith/c_header.txt template file should be used. Line 2 will search for the pattern “File Name :” from the 1st line to 10th line. If found, it will write the current filename in that line. Line 3 will update the Creation Date field. Line 5 will update the Last Modified field with the current date and time when you save the file. Line 4 & 6: While saving the file, the cursor will move to the “Last modified :” (because of last write operation). If you want the cursor back to the previous position then, you need to add Line 4 and 6 to the .vimrc file. Line 4 will mark the current cursor position before updating. Line 6 will restore the cursor position back to its previous positionFinal Note:
- Verify whether autocmd is enabled in Vi / Vim – Execute :version from vi / vim. If autocommand feature is enabled, it will display +autocmd.
- Autocommand help – Execute :help au from vi / vim, to get quick help on vim autocmd features.
相關文章
- vi(vim)命令
- PE教程3: File Header (檔案頭)Header
- How to build your custom release bazel version?UI
- 常用的vi/vim命令
- vi&vim命令列命令列
- Vi/Vim命令桌布圖
- Vi/Vim Tips and Tricks
- vi 和vim 的區別
- vi和vim的編輯模式模式
- ubuntu vi/vim 基本使用方法Ubuntu
- oracle10g 資料檔案頭data file header(file header)OracleHeader
- 小心Nginx的add_header指令NginxHeader
- The Ultimate (DLL) Header File (轉)Header
- Vim和Vi的常用命令
- vi/vim使用入門: vimrc在哪兒?
- EF:split your EDMX file into multiple diagrams
- 使用ADD_CUSTOM_COMMAND 新增自定義命令
- vi/vim使用進階: 在VIM中使用GDB除錯 – 使用vimgdb除錯
- 使用 Vi/Vim 編輯器:基礎篇
- UnixLike 系統vi/vim 命令助記表
- Vim/Vi實用技巧(第二版)
- squid!Your cache is running out of fileUI
- Linux– 檔案編輯器 vi/vim(1)Linux
- vi/vim使用進階: 劍不離手 – quickfixUI
- WPF Add ResourceDictionary file and declared in app.xamlAPP
- Linux—vim/vi 翻頁跳轉命令快捷鍵Linux
- Linux中Vi和Vim區別是什麼?Linux
- vi與vim的區別以及常用命令
- 常用的vi與vim常用命令歸納
- vi與vim的區別以及常用命令***
- 如何安裝和使用純文字編輯器 vi/vim
- [linux]在vi和vim中彩色顯示語法Linux
- Make Vim as Your Bash-IDE Using bash-support PluginIDEPlugin
- ORA-01251: Unknown File Header Version read for file number 7Header
- vi/vim配置篇:亂碼產生的原因及解決
- Linux學習之Vi和Vim區別是什麼?Linux
- 新手指南:Linux上vi(vim)編輯器使用教程Linux
- 【VI】用Vi/Vim/gVim處理字元的大小寫轉換(暨命令gu gU的靈活使用)字元