2011年12月29日木曜日

[vim] phpのfunctionを折りたたむ設定をした。

目指せ!一日 一vimscript.

IDEでよく見るfunction毎に行を折りたたむあれ。
これをやると、


が、




こんな感じになる。
絵、見づらいな。

ここを参考にしました。
折り畳み嫌いの男が一夜でFolding freakにまでなった話



folding設定のやり方

foldmethodにexprを指定すれば、
行ごとに、どのようにfoldingするかを指定することができる。
foldmethodにはほかにもいくつか指定方法があるが今回はこれで。


php用の設定

phpの場合、この関数で定義される条件に沿ってfoldingする。
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    
    else        
        return '='    
    endif
endfunction


bash用の設定

bashの場合、この関数で定義される条件に沿ってfoldingする。
function! BASHFoldSetting(lnum)
    let l:line = getline(a:lnum)
    if l:line =~ '^.*() {'
        return '>1'
    elseif getline(a:lnum) =~ '^}'
        return '<1'
    elseif getline(a:lnum - 1) =~ '^}'
        return '0'
    else
        return '='
    endif
endfunction

ファイルオープン時の設定読み込み

phpならPHPFoldSetting、bashならBASHFoldSettingを読み込む。
autocmd BufEnter *.php set foldmethod=expr foldexpr=PHPFoldSetting(v:lnum)
autocmd BufEnter .bashrc set foldmethod=expr foldexpr=BASHFoldSetting(v:lnum)

キーバインドを設定

" folding用キーバインド
noremap [space] 
nmap  [space]
noremap [space]j zj
noremap [space]l zo
noremap [space]k zk
noremap [space]h zc
noremap [space]i zMzv
noremap [space]m zm


これ、便利だわ。

0 件のコメント:

コメントを投稿