2010-12-16 9 views
4

私はこのようになりますいくつかのコード再フォーマットしたいと思います。これはCのコードであるので、私は=で使用するcindent/cinoptionsを見てきたが、それはそうVimで中括弧を自動的に再フォーマットする方法はありますか?

if (cond) 
{ 
    foo; 
} 

if (cond) { 
    foo; 
} 

をそれは複数行ルールを扱うものではありません。

gqと一緒に使用するformatoptionsを見ていて、それも可能ではないようです。

デフォルトのVimオプションを使用することは可能ですか、特定のプラグインまたは関数を使用する必要がありますか?

答えて

4
:%s/^\(\s*\).*\zs{\s*$/\r\1{/ 

内訳:

^\(\s*\)は=行の先頭に空白をキャプチャ

.* =他のすべて

\zs =この

{ =オープンカーリー後の交換を開始ブレース

\s*$ =あなたが何か行うことができますArtistic Styleをインストールする場合は行末

\r\1{ =改行、捕獲空白、ブレース

+0

これはうまく動作します! – user1027562

5

これは完全にあなたの問題を解決するかどうか、私は知りませんが、これはワンショット動作であれば、あなたは正規表現しようとする場合があります:^Mは制御文字である

:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/ 

注ことをCTRL-Vを入力してからENTERを押して通常生成します(端末によって異なります)。

EDIT:ジェイとZYXのコメントで指摘したように、\rを交換文字列に改行を挿入するより良い方法です。私はそれを知らなかった、ヒントのための多くのありがとう。

+1

なぜ '^ M'を使用するのですか? '\ r'はどうですか? – Jay

+0

これは動作しますが、既存のオプションでアクセス可能だった場合は優先されます。私はあなたの正規表現を +にマッピングされたユーザ定義関数で使うことができました。他の解決策がない場合、私はあなたの答えを受け入れるでしょう。とにかくあなたの入力をありがとう! –

+0

@Jay:私が取り組んでいるすべてのマシンでは動作しませんが、MacOSのみで作業しているなら、それは良い選択です。 – soulmerge

1

あなたはvim自体でそれができるかどうか分かりませんが、BSD indentコマンドを-blオプションで試してみてください。最初の{にカーソルを置き、と入力することができます。indent -blを入力してください。

+0

+1シンプルで高可用性のため – sehe

4

の前に空白を末尾:その後のチャンクを再フォーマットするgqを使用

:set formatprg=astyle\ -b 

をコード。あなたは、これはあなたがあなたの.vimrcファイルに以下を追加することができます Cファイルを編集するたびに有効にしたい場合はテキスト

を強調しました。

autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b 
+1

'BufNewFile、BufRead * .c'を' FileType c'に置き換えることをお勧めします。あるいはこれを '〜/ .vim/ftplugin/c.vim'に入れることさえできます。 – ZyX

+0

いいですが、 'ftplugin'と' after/ftplugin'はなぜ違いますか? – Thedward

関連する問題