VIM自动补全:未找到匹配项

9

我一直在尝试让VIM自动完成功能正常工作,但遗憾的是遇到了问题。

目前我只是试图从基础开始,先在HTML文档上让自动完成功能正常工作。但即使这个也成为了问题。

我设置了正确的DOCTYPE,并甚至指定了不同的DOCTYPE以查看它是否适用于过渡(Transitional)、严格(Strict)或XHTML或HTML5,但似乎没有一个有效。

htmlcomplete.vim文件确实位于“autoload”目录中。

在我的vimrc文件中应用了正确的设置:

filetype plugin indent on

但是这仍然没有起作用,无论我做了多少研究,因为唯一相关的结果是关于VIM中C++自动完成的问题。(目前vim并不完全支持它,但是它确实支持HTML自动完成,因为我以前在多个不同的系统实例上使用过。)
你们觉得我接下来该怎么办?我不确定我该从哪里开始...
无论如何,当我使用“omni completion”选项时,即(Ctrl + X,Ctrl + O),它总是会显示:
Omni Completion (^O^N^P) Pattern not found

默认情况下,语法高亮功能即可正常工作,无需使用任何其他设置:
:syntax on/:syntax enable

它只是按照文件类型进行识别,所以可以正常工作。自从我取消注释“filetype plugin indent on”后,缩进开始工作了。但是我就是无法使其正常工作。
但也许,我错过了重点,想错了。如果我错了,请纠正我。我正在寻找的功能是,当我键入“<”时,它会自动弹出一个下拉列表,显示所有可能的标签,并且当我键入“<”时,它会进一步细化为“div”等。这是我在Vim中习惯的功能,无需任何配置,只需默认设置即可。
当我使用“Ctrl + N”或“Ctrl + P”命令时,我会得到一个非常小的(12个标签)可能标签列表,但这是手动的,不能自动检测输入的“<”。
我看错了吗?Omni Completion不是我应该配置的正确选项吗?还是需要另一个插件来提供此功能?
每当我查看它时,它总是将“Ctrl + X + Ctrl + O”称为语法自动完成,因此我认为这就是我所知道的功能。但也许我错了。

我希望有人能更好地向我解释这个问题,指引我正确的方向。或者告诉我我是否走在正确的道路上(如果是的话),并帮助我解决这个问题?

谢谢大家。 保重。

如请求所示,这里是相关信息:

http://pastebin.com/QfUDVvdP。我的版本是7.3(又名vim73)。我正在使用CLI版本,因为我发现GVIM实际上更令人困惑。但我两者都有,并且它们使用相同的vim运行时。我没有添加任何插件或额外功能,因为这是在Ubuntu 12.04上进行的新安装,这也是一个新安装。唯一被修改或添加的是“smali.vim”语法高亮到语法文件夹中,以及opa.vim和opajs.vim。还有opacomplete.vim到autoload。在/etc/vim/文件夹中有vimrc、vimrc.tiny以及gvimrc。所有vim文件都位于默认目录/usr/share/vim/vim73/和/usr/share/vim/中。除了已经指定的内容之外,没有移动、更改或修改任何文件。


1
规则是“接受解决您问题的答案”。问题在于您有一堆半相关的问题:错误的文档类型、错误的配置、关于 Vim 能力的错误假设等,其中许多都是相当低级的。我的答案(通常情况下)更针对低级问题,而 lzap 的答案则更高级和“直截了当”,我想。因此,我建议标记他的答案。 - romainl
@romainl 你们两个都解决了这个问题,因为这是一个相当详细的问题,并且出现了许多需要修复的问题。但好吧,我会标记他的答案。感谢你们的帮助和态度...但是你真的期望每个人都成为vim大神吗?我很高兴你把生命献给了它,但我觉得有时候我可以使用更好的工具,生活中还有很多其他事情比成为vim信徒更重要。(此外,尽管配置文件被放置在默认目录中,但它仍然有效,这种假设是基于我另一个系统上的默认安装,而错误的文档类型是一个诚实的错误。) - insomnia
我不是也不会假装成为 Vim 大师,我也绝不指望任何人成为大师。但是如果你要花些时间来使用 Vim,在添加插件和其他东西之前,你应该花些时间掌握基础知识。事实上,你应该在使用任何程序之前都这样做,但这对于 Vim 来说是必须的。我已经使用它将近两年,每天使用 9-10 小时。虽然这还不算多,但你可以确定,在最初的一个或两个月里,我花了相当一部分时间阅读教程、查看帮助文档和观看屏幕录像。 - romainl
我不需要深入了解它。现在我正在使用AutoComplPop,感谢您的推荐,它似乎与我所指的那个相同。此外,我可以在vim中编辑html、xhtml、js、java、opa、smali、css、php文档而没有问题。我可以关闭、打开、导航、保存、无提示关闭等等。这是我所需要的所有基础知识。我看不出在这一点上学习更多的理由。这将浪费宝贵的时间。我是sublime text、aptana和eclipse用户。Vim只适用于简单的使用。与我最喜欢的软件相比,它不太理想。那么为什么要阅读所有的文档呢? - insomnia
首先,文档很难浏览,因为它在终端中,我不想在线搜索,因为我几乎不使用它。我更喜欢跳进去学习的方式。这也是我学习大部分编码的方式。此外,我发现Sublime Text比Vim更强大。所以每个人都有自己的选择。我知道Vim确实可以比大多数编辑器优秀得多,但我不喜欢CLI编辑器的感觉,也不喜欢Emacs。我喜欢IDE。是的,我的Vim安装实际上在运行Ubuntu的Android手机上,但我偶尔也会在Windows和Linux上使用它。我喜欢尝试各种东西。 - insomnia
显示剩余3条评论
2个回答

1

Omnicompletion是正确的功能,<C-x><C-o>是正确的快捷键。顺便说一下,你应该停止称之为自动完成,因为它远非自动。

你不需要在~/.vim/autoload中添加任何内容,因为htmlcomplete.vim已经在$VIMRUNTIME中了。

简而言之,根据我所知道的你的设置,自动完成应该可以工作。

但它没有。请附上你的~/.vimrc的内容,已安装插件的列表(以及它们如何/在哪里安装)以及有关你的Vim版本、平台和是否使用GUI或CLI版本的详细信息。

编辑

Omnicompletion是正确的功能,但您正在寻找一个特定的插件,该插件在每次按键时都使用omnicompletion作为底层,因为没有内置设置来启用自动完成。 AutoComplPop就是这样的一个插件(也是我使用的插件),还有其他的插件。选择与您以前的经验最接近的插件。

您不应该触碰/usr/share/vim//etc/vim/中的任何内容。所有设置都应该放在~/.vimrc中,插件应该放在~/.vim/中。

~
  .vim/
    autoload/
      opacomplete.vim
    syntax/
      opa.vim
      opajs.vim
      smali.vim
  .vimrc

在继续之前,您必须将默认文件和目录恢复到其原始状态。

结束编辑


那么这并不是我要找的,因为我所指的函数实际上是可以自动完成所有操作而没有任何快捷方式,只需在我输入 < 时就会出现下拉菜单,其中包含可能的所有标签。 - insomnia
您所请求的信息已添加到原始 OP 底部。 - insomnia
好的,太棒了。谢谢。我会修复它并回复您。我还找到了两张截图,可以清楚地说明我所说的自动化,而不使用任何快捷方式。它就是这样运作的。 - insomnia
另外,没有 ~/.vim 或 ~/.vimrc 文件,我应该创建它们吗? - insomnia
是的,这些不是默认创建的。您必须手动创建它们。 - romainl
显示剩余4条评论

1
首先,Omni Completion从来没有自动工作过。你说当你插入'<'时应该出现弹出窗口 - 这在Vim中默认情况下不起作用。你必须按Ctrl X O组合键。至少对我来说它不起作用。

http://vimdoc.sourceforge.net/htmldoc/version7.html#new-omni-completion

我猜你有一个插件或者什么的。实现起来并不难。可以不加载任何插件启动Vim来检查一下。无论如何,回到问题上。

许多人不知道,Vim 7+对XML/XHTML/HTML语言有相当不错的支持(无需插件!),并且可以通过任何基于XML的语言进行扩展。你可以使用DTD/RNG转换器来准备Vim定义,以便为你提供omni完成。

例如,我的Vim安装默认包含对HTML4和XHTML语言的支持:

$ rpm -ql vim vim-common | grep xml
/usr/share/vim/vim73/autoload/xml
/usr/share/vim/vim73/autoload/xml/html32.vim
/usr/share/vim/vim73/autoload/xml/html401f.vim
/usr/share/vim/vim73/autoload/xml/html401s.vim
/usr/share/vim/vim73/autoload/xml/html401t.vim
/usr/share/vim/vim73/autoload/xml/html40f.vim
/usr/share/vim/vim73/autoload/xml/html40s.vim
/usr/share/vim/vim73/autoload/xml/html40t.vim
/usr/share/vim/vim73/autoload/xml/xhtml10f.vim
/usr/share/vim/vim73/autoload/xml/xhtml10s.vim
/usr/share/vim/vim73/autoload/xml/xhtml10t.vim
/usr/share/vim/vim73/autoload/xml/xhtml11.vim
/usr/share/vim/vim73/autoload/xml/xsd.vim
/usr/share/vim/vim73/autoload/xml/xsl.vim
/usr/share/vim/vim73/autoload/xmlcomplete.vim
/usr/share/vim/vim73/compiler/xmllint.vim
/usr/share/vim/vim73/compiler/xmlwf.vim
/usr/share/vim/vim73/ftplugin/xml.vim
/usr/share/vim/vim73/indent/xml.vim
/usr/share/vim/vim73/syntax/docbkxml.vim
/usr/share/vim/vim73/syntax/xml.vim

诀窍在于Vim的自动加载功能。您需要确保要打开的文件具有正确的DOCTYPE定义。因此,对于HTML和XHTML文件,请使用正确的定义。然后,Vim 7+将自动为您启用XML/HTML omni完成。HTML4的示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
</html>

现在尝试插入body标签,输入“bo”并按Ctrl X O。嘭。尝试添加属性,输入“on”并再次按下。哎呀。

您可以使用Ctrl X O和其他功能:

  • 在“<”后根据上下文完成标记名称
  • 在标记内完成适当的属性
  • 当属性有一定数量的可能值时,帮助完成它们
  • 完成实体名称(在|xml-omni-datafile|中定义以及在当前文件中使用“
  • 在“之后使用时

更多信息(以及可能的用户自定义XML定义)请参见此处:

http://vimdoc.sourceforge.net/htmldoc/insert.html#ft-xml-omni


好的,谢谢。不过我还需要更仔细地看一下。 - insomnia
Doctype 对我很有帮助,它解决了我输入 www.w3c.org 而不是 www.w3.org 时出现的“未找到模式”问题... 还是很难记住。但这很有帮助。顺便说一下,我没有添加任何 HTML 语法文件。我选择 HTML 只是因为我觉得它会得到最好的支持。所以谢谢。我感激你们两个人的帮助,但我更感激你们非粗鲁的回答方式,这在这个网站上是不寻常的。所以谢谢你平静、冷静的回答。但你们俩都帮了大忙。 - insomnia
@eminor 看起来不错,但我绝对会将自动补全用于更多的开发场景,更不用说 JS、Java、Python 和 Perl 了。 - insomnia
1
这不是真的。Vim 7的XML插件需要知道它应该加载哪个xml-omni-datafile。而且还有一段代码读取doctype。如果没有这个,Vim将不知道您想要HTML4、XHTML 1.0还是XHTML 1.1。Vim支持它们全部。 - lzap
你是对的。但在你的情况下并不重要,因为你做错了。请查看vim自动加载文件。 - lzap
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接