Vim 全局变量检查在 Lua(neovim 插件开发)中出错

我正在尝试使用 Lua 编写一个 neovim 插件,当检查变量是否存在时,Lua 抛出错误,如:Undefined variable: g:my_var

方法1:

local function open_bmax_term()
    if (vim.api.nvim_eval("g:my_var")) then
        print('有最后的buff')
    else
        print('没有最后的buff')
    end
end

方法2:


local function open_bmax_term()
    if (vim.api.nvim_get_var("my_var")) then
        print('有最后的buff')
    else
        print('没有最后的buff')
    end
end

这是一个类似的使用 viml 编写的工作函数:(这不会抛出任何错误)

fun! OpenBmaxTerm()

    if exists("g:my_var")
        echo "有最后的buff"

    else
        echo "没有最后的buff"
    endif
endfun

有什么方法可以在 lua 中让它正常工作吗?我尝试将条件包装在 pcall 中,效果就像始终真实。

点赞
用户4984564
用户4984564

vim.api.nvim_eval("g:my_var") 只是评估 vimscript 表达式,如果访问不存在的变量,将会像在 vim 中一样出错。你试过用 vim.api.nvim_eval('exists("g:my_var")') 吗?


编辑:如 @andrewk 建议,使用 vim.g 可能是更好的解决方案,因为使用专用 API 比评估 vim 脚本的字符串更加优雅。

2020-12-21 05:44:28
用户5197105
用户5197105

你可以使用 vim.g 访问全局变量字典 g::

if vim.g.my_var == nil then
    print("g:my_var 不存在")
else
    print("g:my_var 被设置为 "..vim.g.my_var)
end

你也可以参考 :h lua-vim-variables 来查看其他可用的全局 Vim 变量字典!

2021-01-12 07:07:40