从插件或vimrc调用getbufvar函数时,返回空字符串

从插件或vimrc调用getbufvar函数时,返回空字符串,vim,Vim,我有一个插件,在其中一个插件函数中调用getbufvar来检查缓冲区是否是quckfixlist。getbufvar始终返回空字符串。但是,如果我传递一个硬编码的值,比如1作为缓冲区编号,而不是一个变量,它将返回正确的字符串。它是getbufvar中的一个bug吗 下面是要复制的测试代码 function! Test(bufNum) return getbufvar(a:bufNum, '&ft') endfunction au BufEnter * echoerr expand(

我有一个插件,在其中一个插件函数中调用getbufvar来检查缓冲区是否是quckfixlist。getbufvar始终返回空字符串。但是,如果我传递一个硬编码的值,比如1作为缓冲区编号,而不是一个变量,它将返回正确的字符串。它是getbufvar中的一个bug吗

下面是要复制的测试代码

function! Test(bufNum)
  return getbufvar(a:bufNum, '&ft')
endfunction

au BufEnter * echoerr expand('<abuf>'). ", ". Test(expand('<abuf>'))

当我打开一个python文件时,上面的代码片段回应了“1”。但是,如果我调用getbufvar1,“&ft”,它将打印“1,python”。我做错了什么吗?

我想问题来自这里,你可能想用buffer\u number函数来代替

我想问题来自这里,你可能想在VimScript字符串中使用buffer\u number函数,并且在运行时数字不同。expand总是返回一个字符串,但getbufvar需要缓冲区名称v:t\u string或缓冲区编号v:t\u number。因此,1由参数类型解释为缓冲区名称。你必须把它转换成数字以避免这个麻烦


但请注意,在本例中,BufEnter总是在输入缓冲区后被调用,因此您可以安全地使用bufnr,甚至简单地使用&ft而不使用getbufvar。

在VimScript中字符串和数字在运行时会有所不同。expand总是返回一个字符串,但getbufvar需要缓冲区名称v:t\u string或缓冲区编号v:t\u number。因此,1由参数类型解释为缓冲区名称。你必须把它转换成数字以避免这个麻烦


但是请注意,在本例中,BufEnter总是在输入缓冲区后被调用,因此您可以安全地使用bufnr,甚至可以简单地使用&ft而不使用getbufvar。

谢谢,这是有效的。我希望vim帮助页面能更清楚地说明这一点谢谢,这很有效。我希望vim帮助页面能更清楚地说明这一点