如何让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默认左键点击会移动光标到点击位置,拖动还会触发文本选中。这里的配置逻辑:
- 用
wincmd p切换到点击的目标窗口(点击非当前窗口时,该命令会自动完成窗口切换) - 用
getcurpos()和setcurpos()还原光标位置,避免光标被意外移动 - 通过全局变量控制映射逻辑,切换开关时会在命令行显示当前状态
内容的提问来源于stack exchange,提问作者Theodore Yamada-Dessert
相关产品推荐
相关产品推荐

