我正在尝试为 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>')
我期望的是在每个函数调用时切换全屏的值。然而它始终是错误的。谁能解释一下为什么会出现这种情况?
我不是 100% 熟悉 Neovim-qt 框架,但你的toggle_fullscreen() 函数似乎工作正常。当在本地运行时,我得到了切换行为。
您能否提供更多关于键盘映射如何工作的信息?我的猜测是,set()函数简单地运行toggle_fullscreen一次并将其保存在键盘映射中作为“:call GuiWindowFullScreen(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