webdevqa.jp.net

vimで<Plug>コマンドを実行する

最近、_<Plug>_という名前のvimプラグインを見つけました。たとえば、実行したいコマンド_<Plug>abc_def_があります。

私は_:<Plug>abc_def_などのすべてを試しました。何もうまくいきませんでした。また、_:help <Plug>_は情報を提供しませんでした。

ただし、マッピング:map x <Plug>(unite_redraw)を作成することで実行できました。次に、xを押して実行できます。

今、それを実行するためだけにダミーマッピングを作成せずに_:<Plug>abc_def_を実行する方法はありますか?私が使用する実際のプラグインはUniteです。

46
Tarrasch

<Plug>マッピングはmeantであり、マップを介してマップされ、呼び出されます。 <Plug>マップは、プラグインアクションのクリーンなインターフェースをユーザーに公開するためのデバイスです。


例:プラグインのハードコードで、あるキーをあるプラグイン関数にマッピングする代わりに、「map zz to the action 'center美的にカーソル '"、

nnoremap <expr> zz 'zz'.float2nr(winheight(0)*0.1).'<C-E>'

名前付きの<Plug>マッピングのみを公開し、ユーザーが「アクション」をコピーして貼り付けることなく、ユーザーが再マッピングできるようにすることをお勧めします。

nnoremap <expr> <Plug>NiceCenterCursor 'zz'.float2nr(winheight(0)*0.1).'<C-E>'
nmap zz <Plug>NiceCenterCursor

これにより、ユーザーによるオーバーライド、再利用、プラグインが簡単になります。


<Plug>マッピングは、それらが定義されているモードでのみアクティブです。通常モード用に定義されている<Plug>マッピングを実行するには、通常のコマンドと同じように実行できます::normalを使用します(感嘆符なし)。

:execute "normal \<Plug>NiceCenterCursor"

<Plug>は実際には特別なマジックキーを表すため、:normal:executeと組み合わせて使用​​し、<Plug>をエスケープする必要があります。

<Plug>メカニズムは :h 41.11 で詳しく説明されています。 Vimマスターによるこのトピックに関するこの記事 も参照してください。

63
glts