2

是否可以:map使用可以检测到调用它的模式的函数?这就是我所拥有的:

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

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

map \m <Plug>ShowMode

map\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 回答