我希望在视觉模式下选择的任何内容都进入 X11 缓冲区。我理想的工作流程是这样的:
我可以用例如得到几乎类似的东西键盘映射:
vim.keymap.set("v", "<leader>y", [["*ygv]])
,然后在 (2) 和 (3) 之间添加一个步骤,我按 <leader>y
。
我的实际问题是如何使这种拉动(同时保持视觉选择(我的示例键盘映射中的 gv))自动发生。
可能我想要类似自动命令的东西,但我不知道要观看的正确事件。看起来对工作有益的事情是:
vim.api.nvim_create_autocmd({"CursorMoved", "ModeChanged"}, {
callback = function()
local mode = vim.fn.mode(false)
if mode == "v" or mode == "V" or mode == "^V" then
vim.cmd([["*y]])
end
end,
})
但是有一些问题:
:V
,因为初始行选择被删除(但将 gv
添加到命令似乎不起作用)更好的方法是什么?
我在 gnome 上运行 nvim v0.9.4。
如果我理解正确的话,当任何视觉选择更新主选择原子时,您需要标准的 X11 功能(而 CLIPBOARD 与 control-c 或类似功能一起使用)。顺便提一句。为 gtk/X11 构建的 gvim 本身支持此功能(称为自动选择等)。
但是,对于 nvim,情况就更复杂了。该应用程序是为终端构建的,没有任何特定的 gtk 或 X11 代码。操作系统剪贴板访问通常是通过执行外部应用程序(例如 xclip 或 xsel)来完成的。
因此,从技术上讲,您也许可以捕获 CursorMoved 事件,然后(当然,当前模式是可视的)每次调用时不断更新“star”寄存器。但是,老实说,我认为这不是一个好主意。
此类功能可能由某些 nvim gui shell(nvim-qt 等)内部实现。但我不知道有类似的事情发生过。
此外,请考虑 PRIMARY 选择的类似物未包含在 Wayland 核心中。因此它仅作为 Gnome/Wayland 实现中的额外功能而存在。