18

多くのプラグインは、<Plug>マップを介してパブリックマッピングインターフェイスにアクセスできるようにします。その後、ユーザーはこれらのマップを独自のマッピングのフックとして使用できます:nmap <Leader>fu <Plug>fooPluginUnlinkRootDir

最近、マップ名を角かっこで囲んだプラグインに出くわしました。

この構文は、ヘルプファイルのどこにも文書化されておらず、バンドルされているVimランタイムファイルでも使用されていません。それにもかかわらず、これらのプラグインは問題なく機能します。

ブラケットの動機は何ですか?それらを使用することに何か利点はありますか?プラグインの作成者は、(ベストプラクティスとして)このプラクティスに従うように奨励されるべきですか?

4

3 に答える 3

17

ありがとうZyX; あなたの答えはすでに基礎をカバーしているので、私が<Plug>(PluginNameAndMore)表記法を採用した理由を追加させてください。(夏野カナさんのプラグインで初めて見た気がします。)

2 つの理由:

  1. マッピングを他のものでラップする場合、次のように、個々のマッピング ターゲットを視覚的に解析する方が簡単です。

    imap <C-x><C-c> <Plug>(CompleteStart)<Plug>(CamelCaseComplete)<SID>(CamelCaseCompleteModifyUndo)<Plug>(CamelCasePostComplete)<Plug>(CompleteoptLongestSelect)

  2. プラグインに複数のマッピングを定義する場合、1 つの LHS が別のマッピングに含まれないように注意する必要があります。そうしないと、あいまいさが解決される前に Vim が追加のキーストロークを待機する必要があるため、マッピングがトリガーされるときに遅延が発生します。閉じ括弧は、そのようなあいまいさを防ぎます。


BAD                 GOOD
<Plug>MyFunc        <Plug>MyFuncNext, <Plug>(MyFunc)
<Plug>MyFuncReverse <Plug>MyFuncPrev, <Plug>(MyFuncReverse)
于 2012-12-04T08:10:31.437 に答える
8

{lhs}mappings コマンドのとはどちらも{rhs}バイト シーケンスであり、バイト数が自然数である限り (NUL バイトを除く) 任意のデータを含むことができます (バイト{rhs}数がゼロであることも許可されます)。この観点から、(…)練習は他の練習に勝る利点はありません。

具体的には、マイナーな利点が 1 つあります。モーションのある部分のない(textobj-…)全体を選択でき、単語間にダッシュを読みやすくすることができます。全体を( with part)で選択できるので、なぜそうしたいのかわかりません。{lhs}<Plug>a){lhs}aW <Plug>

LineJuggler バージョンの理由はわかりません。

これについては、著者に尋ねた方がよいでしょう。@IngoKarkatはstackoverflowでここにいて、おそらくすぐに質問を読むでしょう。夏野カナへの連絡方法がわかりません。

于 2012-12-03T17:32:22.887 に答える