更改全局变量值neovim

问题描述 投票:0回答:2

我正在尝试为 nvim-qt GUI 定义自定义 lua 配置。为此,我首先想打开和关闭全屏,但我遇到了一些非常奇怪的行为。

vim.g.nvim_qt = {
    fullscreen = false,
    fontsize = 14,
    font_name = 'Iosevka\\ NF:h'
}

local toggle_fullscreen = function ()
    vim.g.nvim_qt.fullscreen = not vim.g.nvim_qt.fullscreen

    if vim.g.nvim_qt.fullscreen then
        return '1'
    else
        return '0'
    end
end

--vim.cmd('call GuiWindowFullScreen(' .. toggle_fullscreen() ..')')
vim.keymap.set('n', '<F11>', ':call GuiWindowFullScreen(' .. toggle_fullscreen() ..')<CR>')

我期望的是在每个函数调用时切换全屏的值。然而它始终是错误的。谁能解释一下为什么会出现这种情况?

lua neovim
2个回答
1
投票

我不是 100% 熟悉 Neovim-qt 框架,但你的toggle_fullscreen() 函数似乎工作正常。当在本地运行时,我得到了切换行为。

您能否提供更多关于键盘映射如何工作的信息?我的猜测是,set()函数简单地运行toggle_fullscreen一次并将其保存在键盘映射中作为“:call GuiWindowFullScreen(0)”,这导致您总是使用错误值调用该函数。


0
投票

我在使用以下代码时遇到了麻烦:

function toggle(key)
  vim.g.my_map[key] = not vim.g.my_map[key]
end

全局变量没有更新。不过,文档很棒,他们解释得很清楚(

:h lua-vim-variables
)

Note that setting dictionary fields directly will not write them back into
Nvim. This is because the index into the namespace simply returns a copy.
Instead the whole dictionary must be written as one. This can be achieved by
creating a short-lived temporary.

Example:

    vim.g.my_dict.field1 = 'value'  -- Does not work

    local my_dict = vim.g.my_dict   --
    my_dict.field1 = 'value'        -- Instead do
    vim.g.my_dict = my_dict         --

这解决了它:

function toggle(key)
  local temp = vim.g.my_map[key]
  temp[key] = not vim.g.my_map[key]
  vim.g.my_map = temp
end
© www.soinside.com 2019 - 2024. All rights reserved.