Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimでuncrustifyをいい感じに適用する

$
0
0

C/C++やObjective-Cのコードをいい感じに整形してくれるUncrustify、最近気に入ってて使ってます。

んでこれをvimで使おうと思って設定したんだけどなんかいい感じにならない。

例えば外部コマンドを使ってフォーマットするformatprgを使って

Vim Script
:setformatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ -l\ CPP\ --no-backup\ 2>/dev/null

こんな感じで設定して、gqで現在の行をフォーマット、ggVGで全選択してからgqで全体をフォーマットできます。
だけどuncrustifyは前後関係を見てうまいこと整形してくれるから1行だけフォーマットなんてしないし、ggVGで全選択するとさっきいた行まで戻るのがめんどい。

もっといい感じにできないかなーと思って探してたら、ありました。
Using Uncrustify with VIM - Stack Overflow
このAnswerのコード。フォーマットしたあと位置を復元してくれるので、めっちゃ便利。
これだ!と思ってちょろっと改変して、言語を自動検出して自動的に言語毎の設定でフォーマットするようにしました。
以下のコード

Vim Script
"----------------------------------------" uncrustify"----------------------------------------" see http://stackoverflow.com/questions/12374200/using-uncrustify-with-vim/15513829#15513829" 例: Shift-Fでコードのフォーマットを行う.nnoremap<S-f> :call UncrustifyAuto()<CR>" 例: 保存時に自動フォーマット" autocmd BufWritePre <buffer> :call UncrustifyAuto()" uncrustifyの設定ファイルletg:uncrustify_cfg_file_path ='~/.uncrustifyconfig'" uncrustifyでフォーマットする言語letg:uncrustify_lang =""
autocmd FileTypecletg:uncrustify_lang ="c"
autocmd FileType cpp letg:uncrustify_lang ="cpp"
autocmd FileType java letg:uncrustify_lang ="java"
autocmd FileType objc letg:uncrustify_lang ="oc"
autocmd FileTypecsletg:uncrustify_lang ="cs"" Restore cursor position, window position, and last search after running a" command.function! Preserve(command)" Save the last search.let search = @/
" Save the current cursor position.let cursor_position = getpos('.')" Save the current window position.
    normal! H
    let window_position = getpos('.')call setpos('.', cursor_position)" Execute the command.
    execute a:command
" Restore the last search.let @/ = search
" Restore the previous window position.call setpos('.', window_position)
    normal! zt
" Restore the previous cursor position.call setpos('.', cursor_position)endfunction" Don't forget to add Uncrustify executable to $PATH (on Unix) or" %PATH% (on Windows) for this command to work.function! Uncrustify(language)call Preserve(':silent %!uncrustify'.' -q '.' -l '.a:language.' -c '.
                \shellescape(fnamemodify(g:uncrustify_cfg_file_path,':p')))endfunctionfunction! UncrustifyAuto()ifg:uncrustify_lang !=""call Uncrustify(g:uncrustify_lang)endifendfunction

うまいことでけた!満足
他にもっと良い感じにできるよーて人がいれば教えて下さい


Viewing all articles
Browse latest Browse all 5608

Trending Articles