Vim 8.1中coc/neoclide格式化按键绑定不生效怎么办
按键映射不生效的核心原因
映射定义中缺少执行确认的回车标识:Vim 映射中输入冒号开头的 Ex 命令时,必须在命令末尾追加<CR>(对应回车操作)才会真正执行命令。你定义的:Format命令可以正常运行,本质是手动输入命令后敲了回车触发执行;但按键映射只把:call CocActionAsync('format')这段文本输入到了命令行,没有追加回车确认,自然不会触发格式化。
另外存在重复映射冲突:你同时为普通模式下的<leader>f绑定了nmap和nnoremap两套映射,后者会覆盖前者的配置,且两套配置本身都缺少<CR>标识,无论哪套生效都无法正常执行。
可直接使用的正确配置
两种配置方案二选一即可:
方案1:直接调用Coc动作(自定义可控性高)
" 普通模式:格式化当前整个缓冲区,加silent不显示多余命令行提示 nnoremap <silent> <leader>f :call CocActionAsync('format')<CR> " 可视化模式:格式化选中的代码段 xnoremap <silent> <leader>f :call CocActionAsync('formatSelected')<CR>
注意可视化模式下需要调用专门的formatSelected动作,不能和普通模式一样调用format,否则会默认格式化整个缓冲区,不会处理选中范围。
方案2:使用coc.nvim官方封装的内置映射(兼容性更好)
coc.nvim 已经内置了选区自动识别、LSP能力兼容、异常兜底的逻辑,直接调用内置<Plug>映射即可,注意这里不能用noremap类非递归映射,否则无法解析coc内部的虚拟键映射:
nmap <silent> <leader>f <Plug>(coc-format-selected) xmap <silent> <leader>f <Plug>(coc-format-selected)
coc.nvim选中代码格式化的判定规则
- 仅在可视化模式(字符选择、行选择、块选择模式均支持)下选中至少1个有效字符/行时,才会识别为需要执行区间格式化
- 触发区间格式化时,coc会自动把选中区域的起止行、列位置传递给当前文件类型对应的LSP服务端,仅修改选区范围内的代码,不会改动选区外内容
- 如果当前挂载的LSP服务不支持区间(range)格式化能力,coc会自动回退为格式化整个缓冲区,不会执行无效操作
内容的提问来源于stack exchange,提问作者VictoriaStudios
相关产品推荐
相关产品推荐

