Vim 全向自动完成问题
Vim omni autocomplete issue
我将下一行代码放入 ~/.vimrc 文件:
filetype plugin on
set omnifunc=syntaxcomplete#Complete
但什么也没发生,当我创建一个扩展名为 .c 的文件并按下 <Ctrl-X><Ctrl-O>
时,vim 编辑器弹出一条“未找到模式”消息。
在这里可以看到我的 .vimrc:
语法代码完成使用当前语言关键字来完成文本。如果文本不匹配任何关键字,它会显示“未找到模式”。例如,在 .c
文件中
func| -> function
abc| -> "pattern not found"
详情见:h ft-syntax-omni
。
你有两个问题。
第一个问题
命令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
我将下一行代码放入 ~/.vimrc 文件:
filetype plugin on
set omnifunc=syntaxcomplete#Complete
但什么也没发生,当我创建一个扩展名为 .c 的文件并按下 <Ctrl-X><Ctrl-O>
时,vim 编辑器弹出一条“未找到模式”消息。
在这里可以看到我的 .vimrc:
语法代码完成使用当前语言关键字来完成文本。如果文本不匹配任何关键字,它会显示“未找到模式”。例如,在 .c
文件中
func| -> function
abc| -> "pattern not found"
详情见:h ft-syntax-omni
。
你有两个问题。
第一个问题
命令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