別のファイルからコードをコピーすると、次のように書式設定が台無しになります。
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
このコードをvimで自動フォーマットするにはどうすればよいですか?
次のキーストロークを試してください。
gg=G
説明:gg
はファイルの先頭に移動し、=
はインデントを修正するコマンドであり、G
はファイルの最後まで操作を実行するように指示します。
Artistic Styleプログラムを使用するのが好きです。彼らの website によると:
Artistic Styleは、C、C++、C#、およびJavaプログラミング言語のソースコードインデンター、フォーマッター、および美化機能です。
Window、Linux、およびMacで実行されます。インデント、タブをスペースに置き換える、またはその逆、好きなように操作の周りにスペースを置く(好きな場合はif(x<2)
をif ( x<2 )
に変換する)、関数定義と同じ行にブレースを置く、またはそれらを移動するなどのことを行いますすべてのオプションはコマンドラインパラメータによって制御されます。
Vimで使用するには、formatprgオプションを設定してから、gqコマンドを使用します。だから、例えば、私は私の.vimrcにあります:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
そのため、.cppファイルを開くたびに、formatprgに好みのオプションが設定されます。次に、ggと入力してファイルの先頭に移動し、 gqG 私の標準に従ってファイル全体をフォーマットします。単一の関数のみを再フォーマットする必要がある場合は、関数の先頭に移動して、次を入力します。 gq][ そして、その機能だけを再フォーマットします。
Astyleのオプション-T4pb
は、私の好みです。 their docs に目を通し、オプションを変更してコードをフォーマットすることができます。
これがデモです。アスタイルの前:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
スタイル後(gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
お役に立てば幸いです。
OPは自動フォーマットを要求しましたが、自動インデントのみを行う回答を受け入れました。
違いは次のとおりです。
オリジナル
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
AUTOINDENT
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
AUTOFORMAT
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
コードを適切にインデントするための組み込みコマンドについては既に説明しました(gg=G
)。コードをbeautifyしたい場合は、 indent のような外部アプリケーションを使用する必要があります。 %
はexモードで現在のファイルを示しているため、次のように使用できます。
:!indent %
プラグインvim-autoformatを使用すると、1つのコマンド https://github.com/Chiel92/vim-autoformat でバッファー(またはバッファー選択)をフォーマットできます。そのために外部形式プログラムを使用し、vimのインデント機能にフォールバックします。
clang-format
がうまくいくことがわかりました。
clang documentation にキーバインドの例がいくつかあります
Vimでequalprg
バインディングを使用することを好みます。これにより、clang-format
または他のG=gg
インデントオプションで=
を呼び出すことができます。
次を.vimrcファイルに追加するだけです。
autocmd FileType c,cpp setlocal equalprg=clang-format
たぶん、あなたは以下を試すことができます$ indent -kr -i8 * .c
あなたの役に立つことを願っています!
上記のindent
が好きですが、ほとんどの場合、作業中のファイルの小さなセクションのみをフォーマットします。 indent
はstdinからコードを取得できるため、本当に簡単です。
:!indent
と入力してフォーマットします。astyle
もstdinを使用するため、同じトリックを使用できます。
追加したいのですが、最初に混乱するのを防ぐために、貼り付ける前に:set paste
と入力することができます。貼り付けた後、js-beautifyやインデントなどの作業のために:set nopaste
と入力すると、再び機能します。
それらはindent
というツールです。 apt-get install indent
でダウンロードしてから、indent my_program.c
を実行できます。