腳本內容如下,歡迎大家補充
- "一些常用的doxygen風格的註釋
- "作者:peacon
- "Email:[email protected]
- "Copyright (c) 2008 任何人都可以自由獲取、修改、發佈該程序。
- "參考:本腳本參考了大量的網上資料以及VIM中文手冊、doxygen user manual
- "不足之處:函數註釋並不能提取函數的參數列表和返回值。雖然www.vim.org有大量的doxygen風格函數註釋腳本,
- "但是經過測試我還沒有發現有完全工作正確的。提取函數參數列表的難點在於有字符串作爲默認參數以及有函數指針
- "的參數。雖然已經想到了些方法,但是鑑於時間關係沒有去實現。如果有你實現了該功能或者有好的想法,歡迎與
- "我進行交流。
- "添加只包含一次文件的宏#ifndef ..#define #endif
- "使用方法:在普通模式下擊鍵zho
- function InsertPragmaOnceTag()
- let CurTime = strftime("%Y_%m_%d_%H_%M") "將當前時間格式化後存入到CurTime當中去
- let CurFilePath = toupper(expand("%")) "expand(/"%/")獲取當前編輯的文件路徑
- let LastSlash = strridx(CurFilePath, "/") "找出路徑中最後一個/
- let HeadTag1 = "#ifndef "
- let HeadTag2 = "#define "
- let HeadTag3 = "#endif //"
- "將非數字、字母替換爲_
- let Suffix = substitute(strpart(CurFilePath, LastSlash + 1), "[^a-zA-Z0-9]", "_", "g")."_".CurTime
- let HeadTag1 = HeadTag1.Suffix
- let HeadTag2 = HeadTag2.Suffix
- let HeadTag3 = HeadTag3.Suffix
- "跳轉到第一行並輸入#ifndef ..
- exe "normal ggO".HeadTag1
- exe "normal O".HeadTag2
- exe "normal Go".HeadTag3
- "添加一個空白行
- exe "normal o"
- "添加兩行空白行並將光標停在第四行
- normal 3GO
- normal 4GO
- endfunction
- "添加doxygen風格的文件註釋
- "使用方法:在普通模式下擊鍵zfc
- function InsertFileCommentTag()
- let l:File_Path = expand("%")
- let l:File_Name = strpart(l:File_Path, strridx(l:File_Path, "/") + 1)
- exe "normal ggO/**"
- exe "normal o* @file ".l:File_Name
- exe "normal o* @brief "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @author [email protected]"
- exe "normal o* @version VERSION_PLACEHOLDER"
- exe "normal o* @date ".strftime("%Y/%m/%d")
- exe "normal o* @note "
- exe "normal o* @remarks Copyright 1998 - 2008 Company Name Inc. All Rights Reserved."
- exe "normal o*/"
- "重新縮進文件
- exe "silent normal gg=G"
- "設置光標在@brief後面
- :call cursor(l:wRow, l:wCol)
- endfunction
- "添加doxygen風格的類註釋
- "使用方法:在普通模式下,將光標停留在類名上面擊鍵zcc
- function InsertClassCommentTag()
- let Class_Name = expand("<cword>")
- exe "normal O/**"
- exe "normal o* @class ".Class_Name
- exe "normal o* @brief "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @author [email protected]"
- exe "normal o* @version VERSION_PLACEHOLDER"
- exe "normal o* @date ".strftime("%Y/%m/%d")
- exe "normal o* @note "
- exe "normal o*/"
- exe "silent normal gg=G"
- :call cursor(l:wRow, l:wCol)
- endfunction
- "添加doxygen風格的函數註釋
- "使用方法:在普通模式下面,將光標停留在函數名稱行擊鍵zmc
- function InsertFunctionCommentTag()
- exe "normal O/**"
- exe "normal o* @brief "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @param "
- exe "normal o* @return "
- exe "normal o* @note "
- exe "normal o*/"
- exe "silent normal gg=G"
- :call cursor(l:wRow, l:wCol)
- endfunction
- "添加doxygen風格的結構體註釋
- "使用方法:在普通模式下,將光標停留在結構體名稱上面擊鍵zsc
- function InsertStructCommentTag()
- let l:Struct_Name = expand("<cword>")
- exe "normal O/**"
- exe "normal o* @struct ".l:Struct_Name
- exe "normal o* @brief "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @note "
- exe "normal o*/"
- exe "silent normal gg=G"
- :call cursor(l:wRow, l:wCol)
- endfunction
- "添加doxygen風格的枚舉體註釋
- "使用方法:在普通模式下,將光標停留在枚舉體名稱上面擊鍵zec
- function InsertEnumCommentTag()
- let l:Enum_Name = expand("<cword>")
- exe "normal O/**"
- exe "normal o* @enum ".l:Enum_Name
- exe "normal o* @brief "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @note "
- exe "normal o*/"
- exe "silent normal gg=G"
- :call cursor(l:wRow, l:wCol)
- endfunction
- "添加doxygen風格的模塊定義註釋
- "使用方法:在visual模式下選定要加入到模塊的行,擊鍵zgc
- function InsertGroupCommentTag()
- "獲取選定的行
- let l:wBegin = line("'<")
- let l:wEnd = line("'>")
- exe "normal ".l:wBegin."G"
- exe "normal O/**"
- exe "normal o* @defgroup "
- let l:wRow = winline()
- let l:wCol = wincol()
- exe "normal o* @brief "
- exe "normal o* @detail "
- exe "normal o* @{"
- exe "normal o* */"
- exe "normal o"
- let l:wEnd = l:wEnd + 7
- exe "normal ".l:wEnd."G"
- exe "normal o/** @} */ //end define of group"
- :call cursor(l:wRow, l:wCol)
- endfunction
- "在符號(宏、成員變量、全局變量)後增加doxygen風格的註釋
- "使用方法:普通模式下,在符號定義行擊鍵zpc
- function InsertItemPostCommentTag()
- exe "normal A/t"
- let l:wRow = winline()
- let l:wCol = wincol()
- while l:wCol < 60
- exe "normal A/t"
- let l:wCol = wincol()
- endwhile
- exe "normal A/*!< */"
- exe "normal 2h"
- endfunction
- "在符號(宏、成員變量、全局變量)上方增加doxygen風格的註釋或者是函數的簡單說明
- "使用方法:在普通模式下,在符號定義行擊鍵zuc
- function InsertItemUpCommentTag()
- exe "normal O"
- exe "normal o/// "
- endfunction
- nmap zho <Esc>:call InsertPragmaOnceTag()<CR>i
- nmap zfc <Esc>:call InsertFileCommentTag()<CR>i
- nmap zcc <Esc>:call InsertClassCommentTag()<CR>i
- nmap zmc <Esc>:call InsertFunctionCommentTag()<CR>i
- nmap zsc <Esc>:call InsertStructCommentTag()<CR>i
- nmap zec <Esc>:call InsertEnumCommentTag()<CR>i
- nmap zpc <Esc>:call InsertItemPostCommentTag()<CR>i
- nmap zuc <Esc>:call InsertItemUpCommentTag()<CR>i
- vmap zgc <Esc>:call InsertGroupCommentTag()<CR>i