Neovim可视化模式下自动同步选中内容至X11缓冲区的配置方案
实现Neovim可视化模式选中文本自动同步到X11缓冲区
针对你需要在可视化模式(字符/行/块模式)下自动将选中内容同步到X11主缓冲区(支持鼠标中键粘贴)的需求,以下是优化后的配置方案,解决触发频繁、块模式适配差、选中状态丢失的问题:
配置代码
local visual_autocmd_group = vim.api.nvim_create_augroup("VisualAutoCopy", { clear = true }) vim.api.nvim_create_autocmd("ModeChanged", { group = visual_autocmd_group, pattern = { "*:v", "*:V", "*:<C-V>", "v:*", "V:*", "<C-V>:*" }, callback = function() if vim.fn.mode():match("[vV]") then vim.defer_fn(function() if vim.fn.mode():match("[vV]") then -- 复制选中内容到X11主缓冲区(*寄存器) vim.cmd('normal! "*y') -- 恢复选中状态 vim.cmd('normal! gv') end end, 50) end end, })
方案说明
- 精准事件触发:使用
ModeChanged事件,匹配所有进入可视化模式(*:v/*:V/*:<C-V>)以及可视化模式内切换子模式(v:*等)的场景,避免CursorMoved的频繁触发问题。 - 延迟执行优化:通过
vim.defer_fn设置50ms延迟,确保光标移动稳定后再执行复制,既保证响应速度,又减少不必要的触发。 - 适配所有可视模式:
vim.fn.mode():match("[vV]")匹配字符、行、块三种可视化模式,normal! "*y会自动适配当前模式复制对应内容。 - 保留选中状态:复制后执行
gv命令恢复选中状态,解决原方案破坏初始选中的问题。
验证方式
- 按
v/V/<C-V>进入对应可视化模式 - 用
hjkl/wb等命令调整选中范围 - 直接在终端外点击鼠标中键即可粘贴最新选中的内容
内容的提问来源于stack exchange,提问作者VRehnberg
相关产品推荐
相关产品推荐

