Neovim中UltiSnips插件导致可视模式左移(<)延迟的问题求助
解决UltiSnips导致Neovim可视模式<键延迟的问题
我之前也碰到过一模一样的问题,根源就是UltiSnips默认给可视模式(x模式)的<键加了一层自定义映射,额外的函数调用拖慢了操作响应速度。从你给出的:verbose map <输出能明确看到,插件把<键映射成了:call UltiSnips#SaveLastVisualSelection()<CR>gvs——这个步骤比默认的左移操作多了函数调用环节,所以产生了延迟;而>键没被插件修改,自然能立即生效。
给你两种可行的解决办法:
方法一:彻底禁用UltiSnips的可视模式默认映射
直接让插件放弃修改可视/选择模式下的按键,这样<键会完全恢复默认的左移功能,不会有任何延迟。在你的Neovim配置文件(比如init.vim或init.lua)里添加对应代码:
VimScript写法:
let g:UltiSnipsRemoveSelectModeMappings = 1
Lua写法:
vim.g.UltiSnipsRemoveSelectModeMappings = 1
这个配置会让UltiSnips停止修改可视模式的所有默认按键,除了<键,s键的默认映射也会被恢复。如果你本来就不用插件的s键代码片段扩展功能,这个方法最省心。
方法二:单独覆盖<键映射,保留插件其他功能
如果你还需要UltiSnips的其他可视模式映射(比如s键的代码片段扩展),可以只把<键恢复成默认行为,在配置里添加:
VimScript写法:
" 恢复可视模式下<键的默认左移操作 xmap < < xnoremap < <
Lua写法:
vim.api.nvim_set_keymap('x', '<', '<', { noremap = true })
这样插件的其他映射会正常保留,但<键会直接执行默认的行左移,不会再触发插件的保存选区函数,延迟问题就能解决。
如果偶尔需要用UltiSnips保存可视选区的功能,你还可以手动把这个功能映射到其他闲置按键上,比如:
xmap <leader>us :call UltiSnips#SaveLastVisualSelection()<CR>gvs
用<leader>us来触发保存选区,完全不影响日常的<键操作。
内容的提问来源于stack exchange,提问作者Farzad
相关产品推荐
相关产品推荐

