2

次のような多くのメニュー エントリがあります。

nnoremenu <silent> 94.015.10 &MyMenu.Test\   :call Test("%","keyw2",keyw3")<CR>
vnoremenu <silent> 94.015.10 &MyMenu.Test\   :<C-U>call Test("'<,'>","keyw2",keyw3")<CR>

1 つは通常モード ' nnoremenu ' で、
もう 1 つはビジュアル モード ' vnoremenu ' です。

最初のキーワード以外は同じキーワード ("%","'<,'>")

それらを統合する方法はありませんか?

peこれを行うことは可能ですか:

an <silent> 94.015.10 &MyMenu.Test\   :call Test("","keyw2",keyw3")<CR>

通常モードまたはビジュアルモードがアクティブかどうかを関数内で確認しますか?

4

1 に答える 1

1

を使用する:anと、ビジュアル モードは によって自動的に中止され<C-C>ます。これは、モードを取得する方法がなくなったことを意味します (<C-U>プレフィックスは必要ありません)。モード情報が必要な場合は、2 つの異なるメニュー定義を保持する必要があります。

コードの重複を減らしたい場合は、他の手段、たとえばメタプログラミング (つまり、ビルドと:executingメニュー定義コマンドをループで実行する) を利用する必要があります。

編集:リクエストに応じて、重複を避けるためにこれに取り組む方法の例を次に示します。

for [mode, range] in [['n', '%'], ['v', "'<,'>"]]
    execute printf('%snoremenu <silent> 94.015.10 &MyMenu.Test\   :call Test(%s,"keyw2","keyw3")<CR>', mode, string(range))
endfor
于 2013-08-01T11:09:08.570 に答える