Vim配置omni autocomplete后C文件按<Ctrl-X><Ctrl-O>提示pattern not found
问题原因
omnifunc为文件类型专属配置项,全局赋值会被打开对应类型文件时加载的文件类型插件重置,导致配置不生效。- C语言omni补全依赖ctags生成的标签文件,未在代码目录生成tags文件时,补全操作无法匹配到对应内容,就会弹出
pattern not found提示。 - 若
set omnifunc配置写在filetype plugin on之前,后续加载的文件类型插件也会覆盖提前设置的补全函数。
解决方法
- 修改
~/.vimrc配置,删除全局set omnifunc配置项,调整为针对C/C++文件单独设置补全函数,调整后对应配置如下:
filetype plugin on autocmd FileType c,cpp setlocal omnifunc=syntaxcomplete#Complete
- 安装ctags依赖工具:
- Debian/Ubuntu 执行:
sudo apt install exuberant-ctags - RHEL/CentOS 执行:
sudo yum install ctags - macOS 执行:
brew install ctags
- Debian/Ubuntu 执行:
- 进入C代码所在项目的根目录,执行
ctags -R .生成标签文件,重启Vim打开.c文件后按<Ctrl-X><Ctrl-O>即可触发正常补全。 - 如需Vim自动向上查找tags文件,可在
~/.vimrc额外添加配置:
set tags+=./tags;
内容的提问来源于stack exchange,提问作者pauk
相关产品推荐
相关产品推荐

