如何禁用Neovim剪切类命令的剪贴板同步,保留复制类命令?
Neovim 剪贴板配置:删除不覆盖系统剪贴板,复制同步
概念澄清
Neovim 的寄存器是存储文本的独立容器:
- 无名寄存器(""):默认存放删除、复制操作的内容,属于Vim/Neovim内部的"默认剪贴板"。
- 加号寄存器("+"):直接对应系统剪贴板,和浏览器等外部程序共享内容。
- 如果你之前设置过
set clipboard=unnamedplus,会让无名寄存器和加号寄存器自动同步,这就导致删除操作的内容直接覆盖系统剪贴板,正是你遇到的问题。
解决方案
核心思路:关闭无名寄存器与系统剪贴板的自动同步,仅让复制(yank)操作的内容同步到系统剪贴板。
方式1:自动同步复制内容(推荐)
Lua 配置(适配现代Neovim)
-- 关闭默认剪贴板同步 vim.opt.clipboard = "" -- 复制时自动同步到系统剪贴板,可选添加复制高亮提示 vim.api.nvim_create_autocmd("TextYankPost", { callback = function() vim.highlight.on_yank({higroup = "IncSearch", timeout = 200}) vim.fn.setreg("+", vim.fn.getreg('"')) end, pattern = "*", })
Vimscript 配置
set clipboard= autocmd TextYankPost * silent! lua vim.highlight.on_yank() autocmd TextYankPost * let @+=@"
方式2:直接映射复制命令
把所有y类命令直接绑定到系统剪贴板寄存器,复制时直接存到+寄存器,删除操作不受影响。
Lua 配置
vim.opt.clipboard = "" -- 映射normal/visual模式的y命令到系统剪贴板 vim.keymap.set("n", "y", '"+y', {noremap = true}) vim.keymap.set("v", "y", '"+y', {noremap = true}) vim.keymap.set("n", "Y", '"+Y', {noremap = true})
Vimscript 配置
set clipboard= nnoremap y "+y vnoremap y "+y nnoremap Y "+Y
额外说明
- 删除命令(
d、c、x等)现在只会把内容存到无名寄存器,不会覆盖系统剪贴板,用p可以粘贴删除的内容;系统剪贴板的内容用"+p粘贴,也可以自己映射成更顺手的快捷键(比如vim.keymap.set("n", "<leader>p", '"+p'))。 - 如果偶尔需要把删除的内容同步到系统剪贴板,手动用
"+d命令即可。
内容的提问来源于stack exchange,提问作者Muravyev Maxim
相关产品推荐
相关产品推荐

