2

:map呼び出されたモードを検出できる関数にすることは可能ですか? これは私が持っているものです:

func! s:ShowModeFunction()
    echomsg mode(1)
endfunc

noremap <expr> <Plug>ShowMode <SID>ShowModeFunction()

map \m <Plug>ShowMode

マップ\mは最終的に top 関数を呼び出します。この関数は、通常モード、オペレーター保留モード、またはいずれかのビジュアル モードを示す文字列をエコーし​​ます。

<expr>ただし、これは中央のマップでのみ機能します。コロン コマンドを実行するmode()と、常に「通常モード」が返されるため、最後の呼び出しが役に立たなくなります。残念ながら、<expr>厳密には右辺に式が必要であり、関数は何も返さないため、暗黙の戻り値0が使用され、カーソルが最初の列に移動します。

4

1 に答える 1

4

関数が何も返さないようにするだけです。これは、式マッピングで何もしません。

func! s:ShowModeFunction()
    echomsg mode(1)
    return ''
endfunc

map-expr に他の制限がある場合は、そこに変数を設定し、「通常の」マッピングで実際の作業 (変数の評価を含む) を行うか、マッピング:callに追加することができます<Plug>ShowMode(または別の中間のものを維持するために)カスタマイズ性)。

于 2012-10-30T16:18:11.297 に答える