2012年2月19日日曜日

[vim] 次のfunctionへジャンプするための設定

 背景


ファイル内の特定のfunctionを探すのは地味に大変。
探すために、functionの一覧を表示したり、これかなってfunctionを読んだりするが、
1つのファイルに大量のfunctionが入っているときはめんどい。

functionの一覧を表示する方法として、フォールディングがよくつかわれるが、
個人的にフォールディングは好きじゃない。
展開するのめんどくさいし、ざっと見たいときとかはfunctionしか見えないことがやだ。

そのため今は、フォールディングの設定を使わず、
unite.vimでそのファイルにあるfunctionの行を抽出している。
[vim] 地味に便利。関数を抽出するunite sourceを作った。

ざっとfunctionを読むときは、何も考えず、j/kで移動してみてた。
しかし、長いfuncitonがいっぱい入っているファイルはきつい。
そこで、function間をジャンプするための設定を思いついた。


設定

といっても、以前やったフォールディングの設定を少し変えて流用してるだけ。
[vim][python] ふははは!読める!読めるぞ!

以下をvimrcに書き込む。
" フォールディングはしない。
set nofoldenable

" 折りたたみレベルを設定する関数
function! PHPFoldSetting(lnum)
    let l:line = getline(a:lnum)    
    if l:line =~ 'function'        
        return '>1'    
    elseif getline(a:lnum + 1) =~ ' \* '        
        return 0    
    elseif getline(a:lnum) =~ ' \* '        
        return 0    
    elseif getline(a:lnum + 1) =~ '^\[\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}\]'        
        return 0    
    else        
        return '='
    endif
endfunction

" PHPファイルの場合に設定 
autocmd BufEnter *.php set foldmethod=expr foldexpr=PHPFoldSetting(v:lnum)

" キーバインド
noremap J zj
noremap K zk


こうしておけば、通常ファイルを開いた場合フォールディングはされず、
shift + j / shift + k で、function間をジャンプすることができる。

0 件のコメント:

コメントを投稿