web-dev-qa-db-ja.com

Viでファイル全体のインデントを修正するにはどうすればいいですか?

Vimでは、すべての行のインデントを修正するためのコマンドは何ですか?

多くの場合、リモート端末にコードをコピーして貼り付けると、全部がめちゃくちゃになってしまいます。私はこれを一気に修正したいと思います。

598
mmcdole

=、indentコマンドは動きを取ることができます。そのため、ファイルの先頭を取得するにはgg、インデントを設定するには=、ファイルの末尾にGを付けるとgg=Gになります。

1143
Logan Capaldo

端末に貼り付ける前に、:set pasteを試してください(それが終わったら:set nopaste)。これはあなたのペーストをめちゃくちゃにしている自動インデント、行折り返しなどの機能をオフにします。

編集:また、私は=インデントよりもはるかに良い結果が通常外部プログラムを使用することによって得られることを指摘しておくべきです。例えば、私はいつも:%!perltidyを実行しています。 astyle、cindentなども使用できます。そしてもちろん、それらをキーストロークにマッピングすることも、ファイルタイプに応じて異なるキーストロークを同じキーストロークにマッピングすることもできます。

119
derobert

和音を入力せずに、自分が入っているブロックを再インデントしたい場合は、次のようにします。

[[=]]
29
Andrew Wagner

すべてのコマンドのマスターは

gg=G

これはファイル全体をインデントします。

そして以下はVimやgVimで素早く行をインデントするために使われるシンプルで洗練されたコマンドのいくつかです。

現在の行より下のすべての行を字下げする

=G

現在行を字下げする

==

現在行の下のn行を字下げする

n==

たとえば、現在の行の下の4行をインデントするには

4==

コードブロックをインデントするには、中括弧の1つに移動してコマンドを使用します。

=%
24
Sagar Jain

あなたはHTMLとXMLファイルをインデントするためにきちんとしたアプリケーション/ユーティリティを使うことができます、そしてそれはそれらのファイルをインデントすることでかなりうまくいきます。

XMLファイルを整理する

:!tidy -mi -xml %

HTMLファイルをきれいにする

:!tidy -mi -html %
17
Naga Kiran

エスケープキーを押してから、以下の組み合わせをすばやく入力します。

gg=G
14
tokhi

1G=G。ファイルのすべての行がインデントされているはずです。 1Gは最初の行を、=は自動インデントを開始し、最後のGはファイルの最後の行を取得します。

11
Amjith

Vimでは:insertを使います。これはあなたのすべてのフォーマットを保ち、自動インデントをしません。詳細についてはhelp :insert

7
Eric Johnson

:set pasteは私がPuTTYを使用し、ウィンドウ間でコードをコピーすることになっているあなたの友人です。私が:set paste(および:set nopaste)をオンにする前に、コピー/貼り付けをすると、まさにその理由でうまくいきました。

7
Elsporko

:set paste、中クリック、set nopasteを使用したくない場合は、クリップボードの内容を貼り付けることもできます。

"*p
"+p

そうすれば、通常モードを終了する必要はありません。 +または*を貼り付ける必要がある場合は、テキストの選択方法によって異なります。:help quoteplusを参照してください。

6
0x89

vim-autoformat あなたの言語に特有の外部プログラムを使ってあなたのソースファイルをフォーマットします。 Rubyファイルの場合はrbeautify "gem"、JavaScriptの場合は "js-beautify" npmパッケージです。

4

複雑なC++ファイルの場合、vimの= filterコマンドを使用したときにvimが必ずしも正しいフォーマットになるとは限りません。したがって、そのような状況では、 astyle (または unsrustify )のような外部C++フォーマッタを使用することをお勧めします。

:%!astyle

Vimの '='関数はデフォルトで内部フォーマッタを使います(これはいつもうまくいくとは限りません)が、 この質問 で議論されているように適切に設定することでスタイルのように外部フォーマッタを使うように設定することもできます。 _。

3
Pierz

XMLファイルの場合は、このコマンドを使用します

:1,$!xmllint --format --recover - 2>/dev/null

Xmllintをインストールする必要があります(パッケージlibxml2-utils)

(出典: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

2
alphayax

viはタブとスペースを尊重する必要がありますが、viは他のエディタとは異なる長さのタブを使用している可能性があることを考慮する必要があります。あなたは「全部がめちゃくちゃになった」より具体的になることができますか?

2

これを行うためのマッピングを作成できます。

これはファイル全体を自動的にインデントし、それでもカーソルをあなたがいる位置に保ちます。

nmap <leader>ai mzgg=G`z
1

Viエディタの場合は、:insertを使用します。これにより、すべてのフォーマットが維持され、自動インデントは挿入されません。実際にフォーマットされたファイルを表示するには、Escキーを押します。のような^私の例:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
0
Priya Sharma

Vimでビジュアルモードに入り、=を押すだけで上から下の行まで選択できます。選択したすべての行がインデントされます。

0
Ramanand Yadav