Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VIM Omni Completion: Pattern Not Found

Tags:

vim

Ive been trying to get the VIM auto completion working, but am running into issues unfortunately.

Right now I tried just starting with the basics. trying to get the auto completion to work on HTML documents first. But even this is becoming an issue.

I set the correct DOCTYPE, and have even specified different ones to see if it will work on Transitional, or Strict, or even XHTML or HTML5, but none are seeming to work.

The htmlcomplete.vim file is indeed in the "autoload" directory.

In my vimrc file, the correct setting is applied:

filetype plugin indent on

But still this isn't working, and no amount of research is helping me, because the only relevant results are issues with C++ auto completion, in VIM. (which vim does not fully support at this time, but it DOES support HTML auto completion, as I know because I have had it work on multiple instances of different systems before.)

What do you guys think I should do next? Im not sure where I should go from here..

No matter what, when I use the "omni completion" option. AKA (Ctrl+X, Ctrl+O), it always says:

Omni Completion (^O^N^P) Pattern not found

The syntax highlighting works by default without even using:

:syntax on/:syntax enable

it just recognizes by the filetype as it should. so that works. The indentation has started working ever since I uncommented the "filetype plugin indent on". but I just cant get this to work correctly.

But maybe, I am missing the point here, and thinking about this the wrong way. So please correct me if I am wrong. What function I am looking for, is when I type "<" it will automatically bring up a drop down list with all the tags it could be, and say I type "<" it will further refine to "div", etc. This is the functionality I am used to in Vim, without any configuring, just by default.

When I use the command "Ctrl+N" or "Ctrl+P" I get a very small (12 tags) list of possible tags, but that is manual, and not automatically detecting the typed "<".

Am I looking at the wrong thing? Is Omni Completion not the right option I should be looking at configuring? Or was this a different plugin to provide this functionality?

Whenever I look into it, it always refers to "Ctrl+X + Ctrl+O" as the syntax auto completion, so I assumed this is the feature I have come to know. but maybe I am wrong.

So can someone help to explain this better to me, point me in the right direction. Or let me know I am on the right path (if I am) and help me fix this issue?

Thank you guys. Take care.

As requested here is the information:

The vimrc file is here: http://pastebin.com/QfUDVvdP

My version is 7.3 (aka vim73)

I am using the CLI version, as I find GVIM actually more confusing. but I have both. and they use the same vim runtime.

I have not added any more plugins or extra feautres, as this is a fresh install on Ubuntu 12.04, which is also a fresh install. The only thing that has been altered or added is "smali.vim" syntax highlighting to syntax folder, as well as opa.vim, and opajs.vim. also opacomplete.vim to autoload.

there is vimrc, and vimrc.tiny, as well as gvimrc in /etc/vim/ folder.

and all the files for vim are located in the default directory, /usr/share/vim/vim73/ and /usr/share/vim/. None of the files are moved, changed, or altered besides what was already specified.

hope that helps.

like image 404
insomnia Avatar asked Aug 20 '12 10:08

insomnia


2 Answers

First of all, Omni Completion never worked (or works) automatically. You said popup should appear when you insert '<' - this is not working in Vim by default. You have to press Ctrl X O combination. At least it is not working for me.

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

I guess you have a plugin for that or something. It's not hard to implement it. Start Vim without loading any plugins to check it out. Anyway, to the question.

Many folks do not know, that Vim 7+ has decent support for XML/XHTML/HTML languages (no plugins needed!) with possibilities to extend it with any XML-based language you want. What you can do is to use DTD/RNG converters that prepares Vim definition which is used to give you omni completion.

For example, my Vim installation contains support for HTML4 and XHTML languages by default:

$ 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

The trick is Vim's autoloading feature. You need to make sure the file you are opening has the proper DOCTYPE definition which is correct. So use that for HTML and XHTML files, then Vim 7+ will automatically enable XML/HTML omni completion for you. Example for HTML4:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
</html>

Now try to insert body tag, type "bo" and hit Ctrl X O. Bang. Try to add an attribute, type "on" and hit it again. Bingo.

You can use Ctrl X O and other features:

  • after "<" complete the tag name, depending on context
  • inside of a tag complete proper attributes
  • when an attribute has a limited number of possible values help to complete them
  • complete names of entities (defined in |xml-omni-datafile| and in the current file with "
  • when used after "

More info (and possible user customization with own XML definitioins) here:

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

like image 175
lzap Avatar answered Oct 20 '22 11:10

lzap


Omnicompletion is the right feature and <C-x><C-o> is the right shortcut. You should stop calling it autocompletion, by the way, because it's far from being automatic.

You don't need anything in ~/.vim/autoload because htmlcomplete.vim is already in $VIMRUNTIME.

In brief, given what I know of your settings, completion should work.

But it isn't. Please append the content of your ~/.vimrc, a list of installed plugins (and how/where they are installed) and details on your Vim version, platform and if you use the GUI or the CLI version.

edit

Omnicompletion is the right feature but you are looking for a specific plugin that uses omnicompletion under the hood on each couple of keystroke as there's no built-in setting to enable Auto completion. AutoComplPop is one such plugin (and the one I use), there are others. Pick the one that most closely matches with your previous experience.

You shouldn't touch anything in /usr/share/vim/ or /etc/vim/. All your settings should go into ~/.vimrc and your plugins should go into ~/.vim/.

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

You must revert the default files and directories to their original state before going further.

endedit

like image 29
romainl Avatar answered Oct 20 '22 11:10

romainl