2

Matchit プラグインをダウンロードして、HTML ファイルで使用しました。リストで使用するまで、すべてが想定どおりに機能していました。

<ol>
    <li id="link-1"><a href="http://www.reddit.com/">reddit</a></li>
    <li id="link-2"><a href="http://www.vim.org/">vim</a></li>
    <li id="link-3"><a href="http://www.w3schools.com/">w3schools</a></li>
</ol>

oタブを押したときにカーソルが最初にある場合、カーソルは終了ではなく最初のリスト項目にジャンプしますol。そして、最初のリスト項目にいるとき、カーソルは次のリスト項目タグにlジャンプします。lしかし、カーソルをリンク タグの最初の a に移動してタブを押すと、Matchit は問題なく動作し、終了タグにジャンプします。Matchit はリスト アイテム以外のすべてのタグで機能しますか? この動作を修正するにはどうすればよいですか?

4

2 に答える 2

3

まず、matchit はアクティベートせずに Vim とともに配布されます。ダウンロードする必要はありません。 の指示に従ってください:help matchit-install

Matchit は、呼び出されたバッファ変数を使用して、b:match_words一致するタグのペアを定義します。HTML ファイルを開いて と入力しecho b:match_wordsます。ここでの値は次のとおりです。

<:>,<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>

:help matchitこれらのパターンを正しく理解している場合、その<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>部分は「問題」がある場所です。動作は定義リストでも同じであることに注意してください: 終了タグにジャンプする代わりに、matchit は中間タグにジャンプします。

これを HTML ftplugin に貼り付けて、少しカスタマイズすれば問題は解決すると思います。

編集

この行は問題を完全に解決するようです:

autocmd FileType html let b:match_words='<:>,<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'

と の 2 つのまったく不要なパターン定義を削除し<ul|ol><dl>基本的な一致のみを残しました。

于 2012-08-07T18:58:32.787 に答える
2

を使ってみてくださいg%。Matchit には悪い動作があります。終了タグにジャンプする代わりに、関連する一致のリストを反復処理します。HTML用にコーディングされたかどうかはわかりませんが、vimscriptの編集中にfor-> continue/break->を繰り返しendforます。g%matchit を反対方向に反復させるため、最初のアイテムにいる場合は最後に移動します (私の例ではfor-> endfor)。

ちなみに、matchit は数年前に vim ディストリビューションに含まれていました。ダウンロードする必要はありません。vim ディストリビューション以外で更新されているかどうかはわかりません。

于 2012-08-07T18:52:34.153 に答える