Vimで一致するXMLタグに移動する


140

Vimの%演算子は、対応する括弧、コメントの終わりなどにジャンプします。ただし、XMLタグ(または私の知る限りの他のタグ)とは一致しません。

Vimを使用して一致するXMLタグにジャンプする最良の方法は何ですか?

注: 私が本当にやりたいことは、一致するタグを手動で探すことなく、XMLファイルのセクションを複製することです。


4
元の質問(説明の前にある:)に対処する際、v + a + tの組み合わせは、視覚的な選択の一番下にあなたを落とすようです。これの反対側は、ビジュアルモード内の「o」コマンドのように見えます。これは、現在の選択の代替端に移動します。これは、XMLドキュメントだけでなく、PHP / HTMLを編集するときにも効果的なトリックです(たまたま自分自身がそうでしたように)。
ジャスティンベル

回答:


73

matchit.vimと呼ばれるvimプラグインがあります。ここで見つけることができます:http : //www.vim.org/scripts/script.php?script_id=39。それはあなたが説明するまさにその正確な目的で作成されました。

それをインストールし、カーソルをタグの本文に置き(<>ではなく、それと一致します)、%を押して他のタグにジャンプします。スクリプトのページを参照して、他に何が一致するかを確認してください。


4
良いですね。ずっと私のハードディスクに座っています。
innaM

34
すでにVimに同梱されているいくつかのバージョンのmatchitがあります。runtime macros/matchit.vimそれを有効にし、%XMLタグの照合を許可する必要があります。
スベン

1
mtchit.vimは、NeoVimではデフォルトで有効になっているようです。
James

あなたはすでにmatchitを持っているかもしれませんが、デフォルトでは有効になっていません。追加packadd! matchit.vimrcて有効にします。続きを読む:help matchit
ruuter

241

追加のプラグインなしでこれを行うことができます:

  • タグの上にカーソルを置きます
  • vat -(外部)タグを選択し、最後にカーソルを置きます
  • あなたの選択を持ってたら、上部と下部との間で切り替えることができますoマイケル・グルーバーのノートに基づいて更新
  • c-変更またはy-コピーまたは、エスケープしてビジュアルモードを終了します...

別の便利な操作は次のとおりですvit。-タグのコンテンツを選択します(内部)。

更新(@elradoに感謝)例:vitoタグの内部コンテンツを選択し、選択したテキストの先頭にカーソルを置くことができます。

リファレンス:https : //superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim

Vimのリファレンス(これを指摘してくれた@Geekに感謝):

:help visual-operators

あなたが得るでしょう:

4. Operating on the Visual area             *visual-operators*

The objects that can be used are:
    ...
    at  a <tag> </tag> block (with tags)        |v_at|
    it  inner <tag> </tag> block            |v_it|
    ...

1
囲まれたコンテンツを「選択」するのではなく、タグにジャンプしたい。また、1回または2回のキーストロークで実行できる場合、タグを選択するたびに5回キーを押すのはなぜですか?(実際には
多くの

2
複雑な方法ですが、終了タグにジャンプする組み込みの方法があるのは素晴らしいことです。ビジュアルモードを迂回することは、そこに到達する唯一の方法ですか?
Mu Mind

2
聖なるモリー、あなたはいつもVimで新しいことを学びます!学ぶことはたくさんあります。これは私に大いに役立ちました、ありがとう!
gosukiwi 2013年

23
注:選択した後、「o」を使用して上部と下部を切り替えることができます
Michael Gruber

3
@オタク、「t」は「タグ」用です。「a」を理解するには、まず「i」を理解する必要があります。cit変更だけのコンテンツ- nteriorタグのを。cat変更内容と-タグのLL タグ自体LSO、開閉の両方を。
エドワード

37

OPは、彼が本当にやりたかったことは、一致するタグを見つけることなくXMLのセクションをコピーすることだと述べました。これはyat<motion>p、を使用して通常モードで簡単に実行できます。これにより、一致するタグを含めてテキストを内部にヤンクしてから貼り付けます。 yit<motion>pほぼ同じですが、外側のタグは含まれていません。

文字列の「y」は、通常のモードの「yank」コマンドです。(:help y

aまたは、ビジュアル選択iなどの演算子の後のオブジェクト選択に使用できますyaまたはの後の記号は、i何を選択するかを指定します。tここで使用するオブジェクトタイプは、SGMLタグを示します。(:help object-select)。

もちろん<motion>、それはあなたが選んだ手段でどこかに移動しp、ヤンクしたテキストをその場所に置くことを意味します。


i「内側」(または「内側」)を表します。a「a」の略ですか?
nilon

@nilon aは「すべて」を表します。
Codie CodeMonkey 2018年

私が使用するニーモニックは、それa周りを表すことです。私にはもっと理にかなっています。
キットジョンソン

5

「ヤンク」、「オブジェクト選択」(タグ選択)、および「最後にヤンクされたテキストにジャンプする」という私のトリック。

yit`] 

タグを閉じる直前にジャンプする

そして

yit

タグを開いた直後にジャンプする

注:これにより、デフォルトレジスタの内容が変更されます

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