Vimの自動インデント/フォーマットコード?

可能な場合はVimをどんどん使用しようとしています。VimとAptanaのようなIDEの間の最大のグリップの1つは、自動インデント機能です。 。

コード(HTML、CSS、PHP)を自動フォーマットして、適切にインデントする方法はありますか?

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

コメント

  • インデントしようとしている言語を明確にできますか? 'がvimですでにサポートされている場合は、それ以上の労力をかけなくても、すでに自動インデントされているはずです。そうでない場合は、プラグインを取得できるはずです。
  • 理想的にはHtml / cssとphp

回答

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

gg =G 

説明:

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

コメント

  • 分解してもらえますか?通常、g自体は何ですか?そして= G?
  • @Chrisは編集を見る
  • いいヒント、私はこれを知らなかった。ただし、bashでゴミの仕事をします。
  • ファイルを開かずにシェルからgg=Gを実行するにはどうすればよいですか?
  • @takeshinさらに詳しく説明してください。ファイルに入力する必要がありますか、それともターミナルで実行する必要がありますか

回答

既存のコードの自動フォーマットについてはわかりませんが、コードを記述していて自動インデントが必要な場合:

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

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

コメント

  • 既存のコードを自動インデントするには、通常モードで={motion}を使用します-例: =Gは、現在の行からファイルの終わりまでのすべてのコードをインデントします。 ==は現在の行をインデントします。
  • また、インデントプラグインがロードされていることを確認します(例::filetype indent on
  • set tw = 4は、TEXTWIDTHを4に設定します

回答

自動インデント*.sh

~/.vimrc

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

コメント

  • これはvimまたはすべてのエディターツールを使用した編集にのみ適用されますか?
  • ~./vimrc vimエディターにのみ適用可能。

回答

このプラグインを使用すると、コードのフォーマットを簡単に実行できます。 。外部フォーマッターを統合し、vimのインデント機能にフォールバックします。

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

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

回答

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

set autoindent 

コメント

  • これは既存の回答に何も追加しません…
  • @jasonwryan実際にはHaiVu 'の回答には:set autoindentが記載されており、現在のファイルに対してのみ自動インデントが有効になっています。.vimrcファイルは永続的に自動インデントを有効にします。
  • あなたのコメントはRahul 'の回答ですでに言及されているので、投稿する前によく考えてください

回答

vimの自動フォーマット/インデントは非常にうまく機能します。まず、この行を~/.vimrcに入力します。

filetype plugin indent on 

次に、vimでファイルを開き、

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

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

回答

bashスクリプトの再フォーマットを行うために、提案されたgg = Gソリューションは、スクリプトをシェルタイプに設定したかどうかに関係なく、VIMではうまく機能しません。代わりにこれは機能します;

shfmt -i 2 -ci script.sh

2つのスペースですべての行を識別し、それ以外の場合はフォーマットを修正します。

回答

bashでこれを行います:

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

これにより、コメントが削除され、スクリプトの「bashway」が再インデントされます。スクリプトに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マークダウンはスペースをタブに置き換えることですが、要点はわかります)
  • この答えは、行の前にスペースを挿入し、すべての配置をリセットすることだけです。同じ(マークダウンを除く)はsed -i 's|^[ \t]\+| |' script.shでも実行できます(つまり、| |内の4つのスペースですが、このWebサイトは複数のスペースを1つにフィルターします) 。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です