fish47
fish47

Reputation: 227

vim omni-complete may delete my previous selected word?

I'm writing HTML with gvim, but what annoys me is that the omni-complete always delete my previous word, even my previous selected ones.

For example, assume I'm writing the following code**('_' means the cursor, hereafter)**:

<a style="_" ></a>

After I Press ^X-^O, it pops out the hint list, and I select "color:"

<a style="color:_" >

And I Press ^X-^O again, it does pops out the proper hints("rgb(", "#"), but it deletes the previous word in the meanwhile, like this:

<a style="rgb(_" >

Can anyone give me some help? Thanks a lot. And this is my gvimrc:

set guifont=文泉驿等宽微米黑\ 14
colorscheme neverness_modified
set number
set guioptions-=T
winpos 0 0
set columns=1000 
set lines=1000
set fileencodings=utf-8,gb18030
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
filetype on
filetype indent on
syntax on
set cindent
set completeopt+=longest

function Maximize_Window()
    silent !wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
endfunction

" ========================
" TagList
" ========================

set tags+=/home/fish47/.vim/tags/STL.tags

" ========================
" TagList
" ========================

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

" ========================
" WinManager
" ========================

let g:winManagerWindowLayout='FileExplorer|TagList'
WMToggle

" ========================
" OmniCppComplete
" ========================

set nocp
filetype plugin on
let OmniCpp_SelectFirstItem=2
let OmniCpp_MayCompleteDot=1
let OmniCpp_MayCompleteArrow=1
let OmniCpp_MayCompleteScope=1

set showcmd

autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags 

Upvotes: 2

Views: 296

Answers (3)

Eric Leschinski
Eric Leschinski

Reputation: 153882

It's a bug and a regression for a newer version of vim. This csscomplete.vim plugin was written for an earlier version and you using a newer version, there's an unexpected regression.

If you hack the plugin, you'll see the delete happens because it moves the cursor in reverse looking for the most obvious context, and that reverse cursor movement gets interpreted as an erase by your vim.

For me the bug was in these lines:

...
let compl_begin = col('.') - 2
while start >= 0 && line[start - 1] =~ '\%(\k\|-\)' 
  let start -= 1 
endwhile 

So yeh there's yer problem: the variable named start is passed back to vim through omnifunc and vim used to leave the existing text as-is, but newer versions interpret that motion as an erase.

So change the second while clause condition asserting the hyphen, and now you're off to the races. But that exposes a new problem, typing a letter and initiating omnifunc slows down as csscomplete.vim bogs down. But hey, one problem at a time huh.

It's like buying a car with the steering wheel mounted on the roof. It's like yeh that's not going to work bub. But this is Vim, if you're not in this for the low level hacking, then you're in the wrong machine shop.

Upvotes: 0

fish47
fish47

Reputation: 227

Let csscomplete.vim to handle the html completion may be a solution to my problem. You can do that by adding "autocmd FileType html set omnifunc=csscomplete#CompleteCSS" in gvimrc.

Upvotes: 0

Ingo Karkat
Ingo Karkat

Reputation: 172570

This is a bug in the htmlcomplete.vim script. You can work around this by inserting a <Space> between property and value, as romainl has pointed out.

Please submit a bug report (basically a link to this page) to the script's author, Mikolaj Machowski; his email address is in the script's header; the script is located at autoload/htmlcomplete.vim in the Vim install directory.

As the last change was from Apr-2011, there's a good chance the author is still maintaining it. Should you not get a response, please inform the vim_dev mailing list (cp. http://www.vim.org/community.php; you need to register first) about this; hopefully, someone else will pick it up.

Upvotes: 0

Related Questions