2012-10-30 14 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

相關問題