我目前正在尝试为 vim 编写一个插件,它允许我为给定的语言定义一个自定义的omnifunc。
除了当我调用getbufline
(为了获取当前缓冲区的内容)时,我几乎可以让它工作,结果包含一个空行而不是当前行的内容。
这是我目前正在使用的功能:
function! statemachine#GetCurrBuffContents()
return join(getbufline(bufname('%'), 1, "$"), "\n")
endfunction
奇怪的是,如果我从 vim via echom statemachine#GetCurrBuffContents()
then 调用我的函数,我会看到预期的输出,即每一行由一个\n
字符分隔。
示例:缓冲区包含以下内容
input signal x
out
state State2
if x == false goto State2
end
如果我在光标位于第 2 行时点击 cx co (触发omnicompletion),我会看到以下内容(我在我的插件中回显它):
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 关于为什么存在该代码的答案