1

設定時にリテラル値の代わりに関数呼び出しなどの式を使用できる2つの方法のうちstatusline、どちらも静的関数を許可していないようです。

  1. set statusline=%{s:MyFunc()}
  2. 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>:も役に立たなかったことに注意してください。

4

2 に答える 2

4

statuslineはスクリプトのコンテキスト内で評価されないため、ローカル スクリプトの関数を使用しようとするs:と常に失敗します。

s:は、指定されたシンボルが静的ではなくスクリプトに対してローカルであることを意味するため、関数を識別する別の方法を使用する必要があります。:help E738可能なシンボル修飾子のリストについては、を参照してください。

質問で述べたように、これは実際に機能します:

function MyFunc()
  return "Hello World"
endfunction

set statusline=%!MyFunc()
于 2013-06-18T22:54:17.933 に答える