web-dev-qa-db-ja.com

Vim indent xmlファイル

私はVimを学んでいますが、これは簡単な作業だと思っていましたが、動作させることができません。ブラウザSOを使用していますが、解決策が機能していません。

ファイル(xml)を正しくインデントしようとしています。私が使用するコマンドは次のとおりです。

gg=G 

またはggVG =(これを自分で作成したものはおそらく何か違うことをします;))

私の.vimrcは:

syntax on 
filetype plugin indent on 
set nu 
85
Haagenti

ベレイの答えが好きです。ただし、次の方がvimrcファイルを変更する必要がないという点で、もう少し柔軟性があると思います。さらに、XMLファイルの選択した部分をフォーマットするのが簡単です(たまたま多くのことをしています)。

最初に、フォーマットするXMLを強調表示します。

次に、通常モードで! xmllint --format -と入力します

下部のコマンドラインは次のようになります。

:'<,'>!xmllint --format -

次にEnterキーを押します。

技術説明

選択したテキストはxmllintコマンドに送信され、--format 'edされ、xmllintの結果がvimで選択したテキストに配置されます。コマンドの最後の-は、標準入力を受信するためのものです。この場合、vimがxmllintに送信する選択テキストです。

172
Jesse Hogan

外部プログラムを使用して、xmlファイルをインデントします。この場合、xmllintを選択したため、コマンドをequalprgオプションに設定します。

:set equalprg=xmllint\ --format\ -

これで実行できます

gg=G

xmllintを使用してxmlファイルをフォーマットします。

vim を使用するたびに取得するには、autocommandを使用して設定します。

autocommand以下のコメントから

au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
63
Birei

サードパーティ製のツールを必要としないシンプルな解決策は、開始タグ「<...>」の前に改行を挿入することです。次に、標準のvim自動インデントを使用できます。要するに:

  1. %s/</\r</g
  2. gg=Gは自動インデントします
29
KFL

短い答え:matchit.vim をオンにします。 packadd matchit.vimrcに追加するか、デフォルトで有効にする vim-sensible を使用できます。

長答:Vim wikiで議論されている xmllintアプローチを含む、VimでXMLを自動インデントするための多くの戦略を試しましたxmllint(およびxmlformattidyなどの他の外部CLIツールと同じアプローチ)の問題は、それらがすべて空白の改行を絞り出すことを主張することです。空白行、コメント、および/またはその他の意図的なフォーマットを削除せずにXMLをインデントするだけであれば、xmllintは最良の選択ではありません。

matchit.vim スクリプトが有効になっている限り、Vimのequals(=)コマンドは既にXMLをサポートしていることがわかります。これを有効にする非常に簡単な方法の1つは、tpopeの vim-sensible を採用することです。もう1つは、packadd matchit.vimrcに追加することです。そうすれば、XMLフォーマットはすぐに使用できます。

11
ctrueden

これは、〜/ .vimrcが適切にセットアップされると簡単に実現できます。

〜/ .vimrcで次のオプションを設定します。

filetype indent on
set smartindent

これにより、カーソルをファイルの先頭に移動し、最後にインデントできます:gg = G

ビジュアルモードで目的のテキストを選択し、=を押してインデントすることもできます。

11
jarederaj

VIMでは、次のコマンドを使用してファイル全体を(ハードタブを使用して)自動インデントします。

:%!XMLLINT_INDENT="^I" xmllint --format -

^Iは、次の方法で生成される単一の文字です。 CTRL+vCTRL+i

4
Cloud

同じ問題がありました。それが判明した、その行

set viewdir=~\.vim\views\

.vimrcで問題が発生しました。確認してください、あなたはそれを持っていません。

1
Boris Brodski