【问题标题】: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
    

    有几种方法可以解决这个问题,但最明智的方法是制作自己的文件类型插件:

    1. 创建~/.vim/after/ftplugin/c.vim

    2. 添加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

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 2011-07-22
        • 2011-10-22
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多