在設置statusline
時,可以使用表達式(例如函數調用)而不是文字值的兩種方式,似乎都不允許使用靜態函數。Vim狀態行:表達式不接受靜態函數
set statusline=%{s:MyFunc()}
set statusline=%!s:MyFunc()
兩者產生以下錯誤對。
E120: Using <SID> not in a script context: <SID>:MyFunc
E15: Invalid expression: <SID>:MyFunc()
我s:MyFunc()
在我試圖設置statusline
同一文件中定義。
當我將全局函數(s:MyFunc
替換爲文件中無處不在的MyFunc
)時,沒有錯誤,並且statusline
設置正確。因此,這個問題。
請注意,替換s:
與<SID>:
沒有幫助。
感謝。我只是試着'執行'set statusline ='。 s:MyFunc()',它工作!似乎是他們所有人的最簡單的解決方案。 :) – Anant
這很好,如果你不需要':MyFunc()'評估所有的時間,只有一次的定義。這是語義上的巨大差異! –
你是對的!在我的情況下,':MyFunc()'總是返回相同的字符串,所以它應該沒問題。但我無法理解你的意思是「一直評估」。例如,是不是'set statusline =%!MyFunc()'也被評估過一次? – Anant