【问题标题】:Vim omni autocomplete issueVim 全方位自动完成问题
【发布时间】:2021-12-19 07:08:45
【问题描述】:
我在 ~/.vimrc 文件中放入下一行代码:
filetype plugin on
set omnifunc=syntaxcomplete#Complete
但是什么也没发生,当我创建一个扩展名为 .c 的文件并按下 <Ctrl-X><Ctrl-O> 时,vim 编辑器弹出了“找不到模式”消息。
在这里可以看到我的 .vimrc:
【问题讨论】:
标签:
vim
plugins
syntax
autocomplete
vi
【解决方案1】:
你有两个问题。
第一个问题
filetype plugin indent on 命令告诉 Vim:
- 检测每个缓冲区的文件类型,
- 为检测到的文件类型提供适当的文件类型插件,
- 为检测到的文件类型提供适当的缩进脚本。
当您加载新缓冲区时,这些事情会自动发生。在这种特定情况下(和其他情况),C ftplugin 包含这一行:
setlocal ofu=ccomplete#Complete
它有效地覆盖了你的:
set omnifunc=syntaxcomplete#Complete
有几种方法可以解决这个问题,但最明智的方法是制作自己的文件类型插件:
-
创建~/.vim/after/ftplugin/c.vim。
-
添加setlocal omnifunc=syntaxcomplete#Complete。
见:help filetype-plugin。
第二个问题
如:help ft-syntax-omni 中所述,syntaxcomplete#Complete 从当前语法定义中提取其建议。由于默认情况下不启用语法突出显示并且您没有显式启用它,因此没有“当前语法”,因此没有基于语法的补全。
您应该在vimrc 中明确启用它:
syntax on
结论
这就是你的vimrc 的样子:
filetype plugin indent on
syntax on
这是您全新的 C 自定义文件类型插件:
" ~/.vim/after/ftplugin/c.vim
setlocal omnifunc=syntaxcomplete#Complete
【解决方案2】:
语法代码完成使用当前语言关键字来完成文本。如果文本与任何关键字都不匹配,则会显示“找不到模式”。例如,在.c 文件中
func| -> function
abc| -> "pattern not found"
详情请见:h ft-syntax-omni。