在Vim中使用YouCompleteMe,如何在编辑参数时保留docstring预览?
解决YouCompleteMe补全后保留docstring预览的问题
我完全懂你的痛点——YCM的docstring预览写代码时真的太实用了,能快速摸清函数用法,但刚选完补全候选项、输入括号进入参数区后,预览窗口直接消失,确实挺闹心的。下面给你几个针对性的解决方案:
1. 修改核心配置,禁止补全后自动关闭预览
YCM默认有个控制预览窗口生命周期的选项,你可以在~/.vimrc(Neovim用户则是~/.config/nvim/init.vim)里添加这一行:
let g:ycm_autoclose_preview_window_after_completion = 0
这个配置会让预览窗口在你选定补全候选项后保持打开状态,哪怕你输入括号、光标进入函数参数区域,docstring也会一直显示。要是你想手动关闭预览,按<Esc>或者执行:YcmClosePreviewWindow命令就行。
2. 绑定快捷键,按需手动调出预览
要是不想让预览窗口一直占着屏幕空间,你可以给YCM的文档预览功能绑定个快捷键,需要的时候随时调用。比如在配置文件里加:
nnoremap <leader>d :YcmShowDocumentation<CR> inoremap <leader>d <Esc>:YcmShowDocumentation<CR>a
这样不管是在正常模式还是插入模式,按下<leader>d(默认leader键是反斜杠\)就能立刻弹出当前光标位置的docstring预览,用完按<Esc>关闭,灵活性拉满。
3. 智能自动触发:光标在括号内时自动显示预览
如果你想要更“聪明”的行为——只有当光标处于函数括号内部时才自动唤起预览,可以用Vim的自动命令(autocmd)实现。试试添加这段配置:
augroup YCMKeepPreview autocmd! autocmd CursorMovedI * if getline('.')[col('.')-2] == '(' && getline('.')[col('.')] == ')' | call YcmShowDocumentation() | endif augroup END
这个自动命令会在插入模式下光标移动时检测:如果光标刚好在一对()中间(也就是刚输入完括号、准备填参数的状态),就自动调用YCM的文档预览。你也可以根据自己的代码习惯,调整判断条件让它更贴合你的使用场景。
这些方案都能解决你遇到的问题,选个最符合你编码习惯的就行~
内容的提问来源于stack exchange,提问作者LJKS
相关产品推荐
相关产品推荐

