Humanity

Edit the world by your favorite way

インデントを修正する

ばよえ〜ん(訳:Vim Advent Calendar 2012への13回目の投稿です)
この記事はVim Advent Calendar 2012の135日目の記事になります。
134日目は@ujihisaさんの記事の予定です。*1

インデント数を修正

「インデント数を修正したい」という要求は
「タブ文字をインデントに使っている場合、見た目として表示する半角スペースの個数を変えたい」なのか、
「半角スペースをインデントに使っている場合、インデント数を実際に書き換えたい」なのかで変わってきます。*2

見た目として表示する半角スペースの個数を変えたい
:setl ts=4

です。'ts'は'tabstop'の略です。

インデント数を実際に書き換えたい

codingstyle.vimの:CSChangeSpaceIndentを使います。

:CSChangeSpaceIndent {前の半角スペース数} {変換後の半角スペース数}

のように使います。
機械的に書き換えるので、間違ったインデント等は修正されません。

インデントをタブ文字から半角スペースに修正

タブ文字だと半角スペース何文字分で表示されるのかが分からないため、半角スペースに変えたい、と思った時とか。

:retab

という便利なコマンドがVimにはあります。
現在表示されているタブ文字の幅(=半角スペース何個分なのか、Vimでいうtabstop)よりも多い/少ない半角スペースに修正したい場合は

:retab 3

のように半角スペースの個数を指定します。*3

インデントを半角スペースからタブ文字に修正

「俺はSmartIndent使いたい」って人向けかもしれません。
どうでもいいけど、Vimscriptみたいなバイトコンパイルされない本当のインタプリタ言語の場合、文字数減らせるという主張は(Vimscriptに)合ってる気がしますね。
自分は半角スペースでずっと書いてるので理由もなく半角スペース派ですけど。


codingstyle.vimの:CSUnretabを使います。

:CSUnretab

のように使います。

:retab同様、tabstopを指定可能です。

:CSUnretab 2

'equalprg'に整形用のプログラムを指定する

本命かもしれません。

今日、インデント数や、半角スペースかタブ文字かなんてプロジェクトごとに設定ファイルを作っておいて配布かVCSにコミットしますよね。
そしてコードフォーマットの実行をすれば一発です。
わざわざインデント数を手で修正したりする必要はないでしょう。


'equalprg'オプションは「=」コマンドに
「=」コマンドは選択範囲を整形するコマンドです。
これを使えばインデントなどは考えずに「:w」→「gg=G」とかで一括整形できるのですね。
ただし正直言って自分はあまりこれを使ったことがなく、
「o」コマンドやエンターで次行に行った際、
たいていうまくインデントしてくれるので気にしませんでした。


C(:help 'cindent')やLisp(:help 'lisp')や、7.3ではJavaScript(:help javascript-cinoptions)などは、Vim自体にインデント機能があるのでインデント数については間違った出力になることはないかもしれません。
ただし、あまり使ったことがないため強く言えないのと、
「gd」コマンドもそうですが、時々間違った変数に飛んでしまいます。
なのであまり信用していません。


「gd」コマンドはctags、「=」コマンドは'equalprg'オプションを各filetypeごとに設定して外部コマンドに任せるのがdesign-not*4にも合ったやり方と言えるでしょう。


'equalprg'オプションの指定方法等については、全てのfiletypeの定義を書く訳にはいかないので、*5省略されました。
詳しくは:helpを読んでください*6
または、続きを読むにはVimと契約してAdvent Calendar記事を書いてください

おまけ: ]p, ]P

現在行に合わせてインデントが調整されて貼り付けられます。Eclipseの貼りつけの挙動と同じ感じですね。
(便利だと思うのですがすみません実はあまり使ったことないです...)

ちなみにマウスの中クリックがデフォルトで]pと同じ挙動になっているようです。

*1:カナダ時間により日本時間からすると若干遅れているようです

*2:「タブ文字をインデントに使っている場合、インデント数を実際に書き換えたい」場合は、単純にインデントが適切にフォーマットされていない場合等が原因として考えられるものなので、ここでは無視します... 「フォーマッタとか使えば(ry」と言う人は最後に書いてありますので最後まで読んでください。

*3:半角スペース3文字派って海外の方に多いようですが、コードいじってると気付かぬ内に「あれ...なんかインデントずれてる...あ、こいつ4スペ派じゃなく3スペ派かよ」って気付いてウォアァァーってなるのでやめてください(日本語で書いても意味ないですが)

*4::help design-not

*5:あと面倒なので

*6:はてなブックマーク - 「言われたことばかりではなく、自分で考えろ!」と言う上司がダメな理由:日経ビジネスオンライン 上司...?