gaoqiang Asked: 2025-04-22 14:14:56 +0800 CST2025-04-22 14:14:56 +0800 CST 2025-04-22 14:14:56 +0800 CST 如何在 Neovim 中通过鼠标选择进行复制? 772 我在 WSL 下使用 Neovim,并在 WindowsTerminal 中设置了选中后复制。但是:set mouse=a在 Neovim 中,鼠标选中后复制在 nvim 中不起作用。 我怎样才能在 Neovim 中实现这一点? vim 2 个回答 Voted Best Answer Friedrich 2025-04-22T23:00:50+08:002025-04-22T23:00:50+08:00 通过将:set mouse=a鼠标控制权转移到 Neovim 上,这意味着你的终端永远不会收到鼠标事件,并且其设置也不起作用。 你可以使用 将鼠标交还给底层终端,:set mouse=但这意味着你将无法在终端功能之外使用鼠标。具体来说,你将无法创建鼠标点击的映射。 你可以让 Neovim 在某些模式下控制鼠标,例如:set mouse=nicromainl所评论的。有关标志的解释,请参阅。:help 'mouse' 另一种解决方法是使用Neovim 常见问题解答中建议的映射,在进行鼠标选择时自动将其拉到剪贴板: :vnoremap <LeftRelease> "*ygv :vnoremap <2-LeftRelease> "*ygv 由于问题被标记为 Vim 和 Neovim,并且为了完整性:Vim 解决方案将:set clipboard+=autoselect按照中所述进行:help clipboard-autoselect。 Bob 2025-04-22T22:27:29+08:002025-04-22T22:27:29+08:00 更新 我关于将复制寄存器与当前选择同步的回答有误导性。请参阅@Friedrich的回答,了解如何同步。我保留了关于设置剪贴板的部分,因为无论如何它都可能有用。 为 WSL 配置剪贴板 如果您想通过系统剪贴板访问复制的文本,您还需要配置 neovim 以使用系统剪贴板: set clipboard+=unnamedplus 最后,你可能需要设置剪贴板提供程序,具体取决于默认检测到的内容(参见 的输出:checkhealth)。WSL的官方建议设置如下: let g:clipboard = { \ 'name': 'WslClipboard', \ 'copy': { \ '+': 'clip.exe', \ '*': 'clip.exe', \ }, \ 'paste': { \ '+': 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))', \ '*': 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))', \ }, \ 'cache_enabled': 0, \ } 我个人的经验是,使用 PowerHell 粘贴功能会有点卡。以下方法在我的系统上性能更好: let g:clipboard = { \ 'name': 'WslClipboard', \ 'copy': { \ '+': 'clip.exe', \ '*': 'clip.exe', \ }, \ 'paste': { \ '+': 'win32yank.exe -o --lf', \ '*': 'win32yank.exe -o --lf', \ }, \ 'cache_enabled': 0, \ } 为了实现此性能,您需要win32yank.exe在 Windows 端安装: # Run this in powershell winget install --id=equalsraf.win32yank -e
通过将
:set mouse=a
鼠标控制权转移到 Neovim 上,这意味着你的终端永远不会收到鼠标事件,并且其设置也不起作用。你可以使用 将鼠标交还给底层终端,
:set mouse=
但这意味着你将无法在终端功能之外使用鼠标。具体来说,你将无法创建鼠标点击的映射。你可以让 Neovim 在某些模式下控制鼠标,例如
:set mouse=nic
romainl所评论的。有关标志的解释,请参阅。:help 'mouse'
另一种解决方法是使用Neovim 常见问题解答中建议的映射,在进行鼠标选择时自动将其拉到剪贴板:
由于问题被标记为 Vim 和 Neovim,并且为了完整性:Vim 解决方案将
:set clipboard+=autoselect
按照中所述进行:help clipboard-autoselect
。更新
我关于将复制寄存器与当前选择同步的回答有误导性。请参阅@Friedrich的回答,了解如何同步。我保留了关于设置剪贴板的部分,因为无论如何它都可能有用。
为 WSL 配置剪贴板
如果您想通过系统剪贴板访问复制的文本,您还需要配置 neovim 以使用系统剪贴板:
最后,你可能需要设置剪贴板提供程序,具体取决于默认检测到的内容(参见 的输出
:checkhealth
)。WSL的官方建议设置如下:我个人的经验是,使用 PowerHell 粘贴功能会有点卡。以下方法在我的系统上性能更好:
为了实现此性能,您需要
win32yank.exe
在 Windows 端安装: