Subscribed unsubscribe Subscribe Subscribe

vim-perl の indent の気持ち悪いの治してみた話

vimperl 周りの設定は https://github.com/petdance/vim-perl を使ってるのだけれども

hoge({
        fuga => 1
    });

こういうふうにインデントされて気持ち悪いなぁと思っていたので indent/perl.vim を見ると以下のように書かれていたので、どうやら同じ行で({[とかが見つかる分だけ sw を足してるから

let braceclass = '[][(){}]'
let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
while bracepos != -1
    let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
    " If the brace is highlighted in one of those groups, indent it.
    " 'perlHereDoc' is here only to handle the case '&foo(<<EOF)'.
    if synid == ""
                \ || synid == "perlMatchStartEnd"
                \ || synid == "perlHereDoc"
                \ || synid =~ "^perlFiledescStatement"
                \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
        let brace = strpart(line, bracepos, 1)
        if brace == '(' || brace == '{' || brace == '['
            let ind = ind + &sw
        else
            let ind = ind - &sw
        endif
    endif
    let bracepos = match(line, braceclass, bracepos + 1)
endwhile

その回数を以下のように設定出来るようにしてそいつを 1 にすれば

let g:perl_braceclass_max_indent_level = 1

hoge({
    fuga => 1
});

みたいな感じになって個人的には良い感じになったけど、インデント周りをよくわかってないので思わぬ副作用があるかもしれないのでしばらく使ってみることとした

https://github.com/soh335/vim-perl/tree/feature/customize-braceclass-max-indent