Vim global variable check throws error in lua (neovim plugin development)

Vim global variable check throws error in lua (neovim plugin development)

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

方法一:

local function open_bmax_term()
    if (vim.api.nvim_eval("g:my_var")) then
        print('has the last buff')
    else
        print('has no the last buff')
    end
end

方法二:


local function open_bmax_term()
    if (vim.api.nvim_get_var("my_var")) then
        print('has the last buff')
    else
        print('has no the last buff')
    end
end

这是一个用 viml 编写的类似函数,它确实有效:(这不会引发任何错误)

fun! OpenBmaxTerm()

    if exists("g:my_var")
        echo "has the last buff"
    
    else
        echo "has no the last buff"
    endif
endfun

知道如何在 lua 中使用它吗?我尝试将条件包装在 pcall 中,其效果类似于使其始终为真。

vim.api.nvim_eval("g:my_var") 只是计算一个 vimscript 表达式,因此访问一个不存在的变量会像在 vimscript 中一样出错。您尝试过 vim.api.nvim_eval('exists("g:my_var")') 吗?

您可以通过 vim.g 使用全局 g: 字典来引用您的变量:

if not vim.g.my_var then
    print("g:my_var does not exist")
else
    print("g:my_var was set to "..vim.g.my_var)
end

您可以参考 :h lua-vim-variables 以查看其他可用的全球 Vim 词典!