You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:21:22