Vimのコードを自動インデント/フォーマットしますか?


35

できる限りVimを使用しようとしています。VimとAptanaのようなIDEの最大のグリップの1つは、自動インデント機能です。

コードを自動フォーマットする手段(HTML、CSS、PHP)はありますか?

もしそうなら、これをvimにどのようにインストールしますか?プラグインをあまり理解していません。私はこのスレッドをレビューしようとしましたが、さらに混乱しました:vimの自動インデント動作を変更するには?


インデントしようとしている言語を明確にできますか?すでにvimでサポートされている場合は、それ以上の努力なしですでに自動インデントされるはずです。そうでない場合は、プラグインを取得できるはずです。
エドスチール

理想的にはHtml / cssとphp
chrisjlee

回答:


54

ファイル全体を自動的にインデントするには:

gg
=G

説明:

  • gg -ファイルの先頭に移動
  • G -ファイルの最後に移動します
  • =- インデント

2
分解してもらえますか?通常、gとは何ですか?および= G?
chrisjlee

@クリス編集を参照してください
武心

1
いいヒント、私はこれを知らなかった。ただし、bashを使用するとゴミ処理が行われます。
スパラフーク14

gg=Gファイルを開かずにシェルから実行する方法は?
WM

@takeshinあなたは私たちがファイルに入力する必要がありますか私たちは、端末でそれを実行する必要がない、ずっとそれをさらに説明してくださいすることができます
Kasun Siyambalapitiya

14

既存のコードの自動フォーマットについては知りませんが、コードを書いているときに自動インデントが必要な場合:

  • :set autoindent(または:set ai)は自動インデントをオンにします
  • Ctrl- dコードのインデントを解除(アウトデント)する
  • インデントするタブまたはスペース-私は個人的にタブを使用します
  • :set tabwidth=4(または:set tw=4)タブがコードをインデントするスペースの数を制御します
  • >>このコマンドは、現在の行をインデントします。数字を接頭辞として付ける4>>と、現在の行から4行インデントします。
  • 同様に、<<コマンドは行のインデントを解除します

これで良いスタートが切れることを願っています。


7
既存のコードを自動インデントするには={motion}、通常モードで使用します。たとえば=G、現在の行からファイルの最後までのすべてのコードをインデントします。==現在の行をインデントします。
Edd Steel

1
また、インデントプラグインがロードされていることを確認します(たとえば、:filetype indent on
jw013

2
4セットTW = 4セットTEXTWIDTH
ステファンローラー

4

自動インデント *.sh

次の行を追加するだけです ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

これは、vimまたはすべてのエディターツールによる編集にのみ適用されますか?
WM

1
~./vimrcvimエディターにのみ適用されます。
ラーフルパティル

2

このプラグインにより、コードの書式設定が簡単になります。外部フォーマッタを統合し、vimのインデント機能にフォールバックします。

https://github.com/Chiel92/vim-autoformat

また、フォーマットとインデントの違いにも注意してください。インデントはすべての行の前の空白のみを修正しますが、書式設定は演算子の周りの空白など他のことも処理します。


2

~/.vimrcファイルを作成/編集し、次の行を追加します。

set autoindent

2
これは既存の回答に何も追加しません
...-jasonwryan

@jasonwryan実際、Hai Vuの回答では:set autoindent、現在のファイルに対してのみ自動インデントを有効にします。.vimrcファイルに追加すると、自動インデントが永続的に有効になります。
Akshat Maheshwari

コメントのあなたの部分がすでにラーフルの答えで言及されているので、投稿する前に考える
Indrajeet Gour

0

bashではこれを行います:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

これにより、コメントが削除され、スクリプトの「bash way」が再インデントされます。スクリプトにHEREDOCSが含まれている場合は機能しませんが、これを行うと:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

どのスクリプトでも動作しますが、スクリプト全体が4つのスペースでインデントされます。自由に変更できますが、スクリプトで私の名前を引用して投稿してください!:D


私はこれが質問の要点を逃しているかもしれないと信じています。一連の行をインデントするのではなく、OPはさまざまな言語のVIM内で自動インデントしたいと思っていたと思います。余談ですがsed、希望する場合はこれをもう少し直接達成できるかもしれません:(cat script_to_be_reindented.sh | sed 's#^# #g'まあ、SO
マークダウン

0

vimのautoformat / indentはかなりうまく機能します。まず、次の行を次の行に追加します~/.vimrc

filetype plugin indent on

次に、vimでファイルを開いて入力します gg=G

gg最初の行にカーソルの移動。=インデントのコマンドを実行します。Gここから最後の行まで実行するようにインデントコマンドに指示します。)

すべての行がインデントされたままになっているなど、自動フォーマットが本当に悪いように見える場合は、実行して、リストに(または使用している言語)があるかどう:scriptnamesかを確認.../indent/html.vimします。そうでない場合は、~/.vimrc正しいことを確認してください。または:filetype plugin indent on、vimコマンドラインから実行した場合は、ファイルを再度開く必要があります:e

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.