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

如何让Neovim鼠标仅切换分屏焦点且支持功能开关

解决Neovim鼠标点击分屏仅聚焦不选中文本的问题

核心配置(实现点击仅聚焦)

通过自定义鼠标点击映射,覆盖默认的选中文本行为,同时保留窗口切换功能。根据你的配置习惯选择对应代码:

Lua 配置(推荐)

-- 全局变量控制功能开关,默认开启
_G.mouse_focus_only = true

-- 重写Normal模式下的左键点击行为
vim.keymap.set('n', '<LeftMouse>', function()
  if _G.mouse_focus_only then
    -- 切换到点击的目标窗口
    vim.cmd('wincmd p')
    -- 还原光标到点击前的位置,避免光标意外移动
    local prev_pos = vim.fn.getcurpos()
    vim.fn.setcurpos(prev_pos)
  else
    -- 关闭功能时使用默认鼠标行为
    vim.fn.execute('normal! <LeftMouse>')
  end
end)

Vimscript 配置

" 全局变量控制功能开关,默认开启
let g:mouse_focus_only = v:true

" 重写Normal模式下的左键点击行为
nnoremap <expr> <LeftMouse> g:mouse_focus_only ? 
    \ "\<Cmd>wincmd p\<CR>\<Cmd>call setcurpos(getcurpos())\<CR>" : 
    \ "\<LeftMouse>"

添加快速开关快捷键

设置一个快捷键一键切换功能开启/关闭,示例用<Leader>mf,你可以改成自己习惯的键位:

Lua 版本

vim.keymap.set('n', '<Leader>mf', function()
  _G.mouse_focus_only = not _G.mouse_focus_only
  local status = _G.mouse_focus_only and "开启" or "关闭"
  print("鼠标仅聚焦功能已" .. status)
end, { desc = "切换鼠标仅聚焦模式" })

Vimscript 版本

nnoremap <Leader>mf :let g:mouse_focus_only = !g:mouse_focus_only<CR>
    \ :echo "鼠标仅聚焦功能已" . (g:mouse_focus_only ? "开启" : "关闭")<CR>

原理说明

Neovim默认左键点击会移动光标到点击位置,拖动还会触发文本选中。这里的配置逻辑:

  1. 用wincmd p切换到点击的目标窗口(点击非当前窗口时,该命令会自动完成窗口切换)
  2. 用getcurpos()和setcurpos()还原光标位置,避免光标被意外移动
  3. 通过全局变量控制映射逻辑,切换开关时会在命令行显示当前状态

内容的提问来源于stack exchange,提问作者Theodore Yamada-Dessert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:56:03