苦練1天半,終於寫出了一些常用doxygen風格的vim註釋腳本

 腳本內容如下,歡迎大家補充

  1. "一些常用的doxygen風格的註釋
  2. "作者:peacon
  3. "Email:[email protected]
  4. "Copyright (c) 2008 任何人都可以自由獲取、修改、發佈該程序。
  5. "參考:本腳本參考了大量的網上資料以及VIM中文手冊、doxygen user manual
  6. "不足之處:函數註釋並不能提取函數的參數列表和返回值。雖然www.vim.org有大量的doxygen風格函數註釋腳本,
  7. "但是經過測試我還沒有發現有完全工作正確的。提取函數參數列表的難點在於有字符串作爲默認參數以及有函數指針
  8. "的參數。雖然已經想到了些方法,但是鑑於時間關係沒有去實現。如果有你實現了該功能或者有好的想法,歡迎與
  9. "我進行交流。

  10. "添加只包含一次文件的宏#ifndef ..#define #endif
  11. "使用方法:在普通模式下擊鍵zho
  12. function InsertPragmaOnceTag()
  13.     let CurTime = strftime("%Y_%m_%d_%H_%M")    "將當前時間格式化後存入到CurTime當中去
  14.     let CurFilePath = toupper(expand("%"))      "expand(/"%/")獲取當前編輯的文件路徑
  15.     let LastSlash = strridx(CurFilePath, "/")   "找出路徑中最後一個/
  16.     let HeadTag1 = "#ifndef "
  17.     let HeadTag2 = "#define "
  18.     let HeadTag3 = "#endif //"
  19.     "將非數字、字母替換爲_
  20.     let Suffix = substitute(strpart(CurFilePath, LastSlash + 1), "[^a-zA-Z0-9]""_""g")."_".CurTime  
  21.     let HeadTag1 = HeadTag1.Suffix
  22.     let HeadTag2 = HeadTag2.Suffix
  23.     let HeadTag3 = HeadTag3.Suffix
  24.     
  25.     "跳轉到第一行並輸入#ifndef ..
  26.     exe "normal ggO".HeadTag1                   
  27.     exe "normal O".HeadTag2
  28.     exe "normal Go".HeadTag3
  29.     "添加一個空白行
  30.     exe "normal o"
  31.     "添加兩行空白行並將光標停在第四行
  32.     normal 3GO
  33.     normal 4GO
  34. endfunction

  35. "添加doxygen風格的文件註釋
  36. "使用方法:在普通模式下擊鍵zfc
  37. function InsertFileCommentTag()
  38.     let l:File_Path = expand("%")
  39.     let l:File_Name = strpart(l:File_Path, strridx(l:File_Path, "/") + 1)
  40.     exe "normal ggO/**"
  41.     exe "normal o*  @file ".l:File_Name
  42.     exe "normal o*  @brief  "
  43.     let l:wRow = winline()
  44.     let l:wCol = wincol()
  45.     exe "normal o*  @author [email protected]"
  46.     exe "normal o*  @version VERSION_PLACEHOLDER"
  47.     exe "normal o*  @date ".strftime("%Y/%m/%d")
  48.     exe "normal o*  @note "
  49.     exe "normal o*  @remarks  Copyright 1998 - 2008 Company Name Inc. All Rights Reserved."
  50.     exe "normal o*/"
  51.     "重新縮進文件
  52.     exe "silent normal gg=G"
  53.     "設置光標在@brief後面
  54.     :call cursor(l:wRow, l:wCol)
  55. endfunction

  56. "添加doxygen風格的類註釋
  57. "使用方法:在普通模式下,將光標停留在類名上面擊鍵zcc
  58. function InsertClassCommentTag()
  59.     let Class_Name = expand("<cword>")
  60.     exe "normal O/**"
  61.     exe "normal o*  @class ".Class_Name
  62.     exe "normal o*  @brief  "
  63.     let l:wRow = winline()
  64.     let l:wCol = wincol()
  65.     exe "normal o*  @author [email protected]"
  66.     exe "normal o*  @version VERSION_PLACEHOLDER"
  67.     exe "normal o*  @date ".strftime("%Y/%m/%d")
  68.     exe "normal o*  @note "
  69.     exe "normal o*/"
  70.     exe "silent normal gg=G"
  71.     :call cursor(l:wRow, l:wCol)
  72. endfunction

  73. "添加doxygen風格的函數註釋
  74. "使用方法:在普通模式下面,將光標停留在函數名稱行擊鍵zmc
  75. function InsertFunctionCommentTag()
  76.     exe "normal O/**"
  77.     exe "normal o*  @brief  "
  78.     let l:wRow = winline()
  79.     let l:wCol = wincol()
  80.     exe "normal o*  @param "
  81.     exe "normal o*  @return "
  82.     exe "normal o*  @note "
  83.     exe "normal o*/"
  84.     exe "silent normal gg=G"
  85.     :call cursor(l:wRow, l:wCol)
  86. endfunction

  87. "添加doxygen風格的結構體註釋
  88. "使用方法:在普通模式下,將光標停留在結構體名稱上面擊鍵zsc
  89. function InsertStructCommentTag()
  90.     let l:Struct_Name = expand("<cword>")
  91.     exe "normal O/**"
  92.     exe "normal o*  @struct ".l:Struct_Name
  93.     exe "normal o*  @brief  "
  94.     let l:wRow = winline()
  95.     let l:wCol = wincol()
  96.     exe "normal o*  @note "
  97.     exe "normal o*/"
  98.     exe "silent normal gg=G"
  99.     :call cursor(l:wRow, l:wCol)
  100. endfunction

  101. "添加doxygen風格的枚舉體註釋
  102. "使用方法:在普通模式下,將光標停留在枚舉體名稱上面擊鍵zec
  103. function InsertEnumCommentTag()
  104.     let l:Enum_Name = expand("<cword>")
  105.     exe "normal O/**"
  106.     exe "normal o*  @enum ".l:Enum_Name
  107.     exe "normal o*  @brief  "
  108.     let l:wRow = winline()
  109.     let l:wCol = wincol()
  110.     exe "normal o*  @note "
  111.     exe "normal o*/"
  112.     exe "silent normal gg=G"
  113.     :call cursor(l:wRow, l:wCol)
  114. endfunction

  115. "添加doxygen風格的模塊定義註釋
  116. "使用方法:在visual模式下選定要加入到模塊的行,擊鍵zgc
  117. function InsertGroupCommentTag()
  118.     "獲取選定的行
  119.     let l:wBegin = line("'<")
  120.     let l:wEnd = line("'>")
  121.     exe "normal ".l:wBegin."G"
  122.     exe "normal O/**"
  123.     exe "normal o*  @defgroup  "
  124.     let l:wRow = winline()
  125.     let l:wCol = wincol()
  126.     exe "normal o*  @brief "
  127.     exe "normal o*  @detail "
  128.     exe "normal o*  @{"
  129.     exe "normal o*  */"
  130.     exe "normal o"
  131.     let l:wEnd = l:wEnd + 7 
  132.     exe "normal ".l:wEnd."G"
  133.     exe "normal o/** @} */ //end define of group" 
  134.     :call cursor(l:wRow, l:wCol)
  135. endfunction

  136. "在符號(宏、成員變量、全局變量)後增加doxygen風格的註釋
  137. "使用方法:普通模式下,在符號定義行擊鍵zpc
  138. function InsertItemPostCommentTag()
  139.     exe "normal A/t"
  140.     let l:wRow = winline()
  141.     let l:wCol = wincol()
  142.     while l:wCol < 60
  143.         exe "normal A/t"
  144.         let l:wCol = wincol()
  145.     endwhile
  146.     exe "normal A/*!<  */"
  147.     exe "normal 2h"
  148. endfunction

  149. "在符號(宏、成員變量、全局變量)上方增加doxygen風格的註釋或者是函數的簡單說明
  150. "使用方法:在普通模式下,在符號定義行擊鍵zuc
  151. function InsertItemUpCommentTag()
  152.     exe "normal O"
  153.     exe "normal o///  "
  154. endfunction

  155. nmap zho <Esc>:call InsertPragmaOnceTag()<CR>i
  156. nmap zfc <Esc>:call InsertFileCommentTag()<CR>i
  157. nmap zcc <Esc>:call InsertClassCommentTag()<CR>i
  158. nmap zmc <Esc>:call InsertFunctionCommentTag()<CR>i
  159. nmap zsc <Esc>:call InsertStructCommentTag()<CR>i
  160. nmap zec <Esc>:call InsertEnumCommentTag()<CR>i
  161. nmap zpc <Esc>:call InsertItemPostCommentTag()<CR>i
  162. nmap zuc <Esc>:call InsertItemUpCommentTag()<CR>i
  163. vmap zgc <Esc>:call InsertGroupCommentTag()<CR>i

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章