閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

Vim の DoxygenToolkit.vim

Doxygen 形式のコメント入力をサポートするスクリプト。 Wiki の方に使い方が載っています。

このままでも便利なのですが、仕事でこれまで書いていたコメントと形式が違うので少しスクリプトをいじって同じ形式で出せるようにしてみました。ある程度の設定は _vimrc に書くことで変更できるのですが、全部は制御できないようなので。以下パッチ。

*** /cygdrive/c/home/backup_vim/DoxygenToolkit.vim	Wed Apr 19 08:14:05 2006
--- DoxygenToolkit.vim	Wed Apr 19 11:28:58 2006
***************
*** 296,309 ****
  
  	" Start creating doxygen pattern
  	exec "normal `d" 
! 	exec "normal O" . g:DoxygenToolkit_startCommentTag . g:DoxygenToolkit_blockHeader
  	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_briefTag_pre
  	mark d
! 	if ( g:DoxygenToolkit_endCommentTag == "" )
! 		exec "normal o" . g:DoxygenToolkit_startCommentTag . g:DoxygenToolkit_blockFooter
! 	else
! 		exec "normal o" . g:DoxygenToolkit_blockFooter . g:DoxygenToolkit_endCommentTag
! 	endif
  	exec "normal `d"
  
  	" Class definition, let's start with brief tag
--- 296,305 ----
  
  	" Start creating doxygen pattern
  	exec "normal `d" 
! 	exec "normal O" . "//" . g:DoxygenToolkit_blockHeader
  	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_briefTag_pre
  	mark d
! 	exec "normal o" . "//" . g:DoxygenToolkit_blockFooter
  	exec "normal `d"
  
  	" Class definition, let's start with brief tag
***************
*** 374,380 ****
  		endif
  	endwhile
  	if ( l:returnFlag >= 1 )	
! 		exec "normal o" . g:DoxygenToolkit_interCommentTag
  		exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_returnTag
  	endif
  
--- 370,376 ----
  		endif
  	endwhile
  	if ( l:returnFlag >= 1 )	
! "		exec "normal o" . g:DoxygenToolkit_interCommentTag
  		exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_returnTag
  	endif
  
***************
*** 434,440 ****
  
  	" Add blank line if necessary
  	if ( l:argList != 0 )
! 		exec "normal `do" . g:DoxygenToolkit_interCommentTag
  	endif
  
  	" move the cursor to the correct position (after brief tag)
--- 430,436 ----
  
  	" Add blank line if necessary
  	if ( l:argList != 0 )
! "		exec "normal `do" . g:DoxygenToolkit_interCommentTag
  	endif
  
  	" move the cursor to the correct position (after brief tag)
***************
*** 505,511 ****
  	let l:date = strftime("%Y-%m-%d")
  	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_dateTag . l:date
  	if ( g:DoxygenToolkit_endCommentTag == "" )
! 		exec "normal o" . g:DoxygenToolkit_interCommentTag
  	else
  		exec "normal o" . g:DoxygenToolkit_endCommentTag
  	endif
--- 501,507 ----
  	let l:date = strftime("%Y-%m-%d")
  	exec "normal o" . g:DoxygenToolkit_interCommentTag . g:DoxygenToolkit_dateTag . l:date
  	if ( g:DoxygenToolkit_endCommentTag == "" )
! "		exec "normal o" . g:DoxygenToolkit_interCommentTag
  	else
  		exec "normal o" . g:DoxygenToolkit_endCommentTag
  	endif

実際に使ってみました。以下のような関数があったとして...

>

int hoge(int a, char b)
{
return 0;
}

先頭の行にキャレットがあるときに :Dox とすると:

//===========================================================================
//! 
//! @param[in] a 
//! @param[in] b 
//! @return 
//===========================================================================
int hoge(int a, char b)
{
    return 0;
}

といった感じのコメントを挿入してくれます。関数に戻り値がない場合は @return は挿入されません。

Vim script は簡単に書けていいなあ。 Lisp はまだ書けない……。