現在、特定の言語のカスタム omnifunc を定義できるようにする vim 用のプラグインを作成しようとしています。
getbufline
(現在のバッファの内容を取得するために) を呼び出すと、現在の行の内容ではなく空の行が結果に含まれるという事実を除けば、これをほぼ機能させることができます。
ここに私が現在使用している機能があります:
function! statemachine#GetCurrBuffContents()
return join(getbufline(bufname('%'), 1, "$"), "\n")
endfunction
これに関する奇妙な部分は、vim から関数を呼び出すとechom statemachine#GetCurrBuffContents()
、出力が期待どおりに表示されることです。つまり、各行が\n
文字で区切られています。
例: バッファには次が含まれます
input signal x
out
state State2
if x == false goto State2
end
カーソルが 2 行目にあるときに (オムニコンプリートをトリガーするために) cx co を押すと、次のように表示されます (プラグイン内でエコーアウトします)。
input signal x^@^@^@state State2^@if x == false goto State2^@end
を実行するechom statemachine#GetCurrBuffContents()
と、次のように表示されます。
input signal x^@input^@^@state State2^@if x == false goto State2^@end
関連するコードは次のとおりです 。
編集:修正されたので、現在使用しているコードを次に示します。そのコードが存在する理由については、Ingorの回答を参照してください