2012-10-30 16 views
2

是否有可能:map到可以检测到它被称为 在模式的功能?这是我有:检测一个从普通调用的函数里面的模式:地图

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

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

map \m <Plug>ShowMode 

地图\m最终调用顶部函数,它回声一个字符串 指示正常模式下,运营商等待模式,或者任何Visual 模式。

这仅适用于<expr>中间地图上虽;任何结肠 命令将使最终mode()电话也没用,因为它会 然后总是返回“正常模式”。不幸的是,<expr>严格的 需要在右侧的表达式,并且由于函数 不返回任何内容,所以使用隐式返回值0,其中 将光标移动到第一列。

回答

4

就使函数返回任何结果,这是那么无操作表达式制图:

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

如果有一个在地图EXPR其他任何限制,只需设置一个变量在那里,做实际工作(包括评估的变量)在一个“正常”的映射或:call,你可以附加到你的<Plug>ShowMode映射(或其他中间一个,以保持定制)。

+0

这并不为我工作,我现在得到一个提示与模式字母,例如。 'V'。至于你的第二个建议 - ':call'命令是不存在的,因为它会使'mode()'总是返回'n'为“正常模式”。 – glts

+0

你的确切例子适合我。由于':echomsg',显示有点乱,但这不是提示,任何命令(如'l'或'i')都会立即执行。尝试用':let g:mode = mode(1)'代替它,无论如何,这更接近实际使用。 –

+0

够公平的,谢谢。我会稍后再解决这个问题。 – glts

相关问题