vim omni-complete可以删除我之前选择的单词吗?

时间:2012-09-14 12:33:56

标签: html vim omnicomplete

我正在用gvim编写HTML,但令我恼火的是,omni-complete总是会删除我之前的单词,甚至是我之前选择的单词。

例如,假设我正在编写以下代码**('_'表示光标,此后)**:

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

按下^ X- ^ O后,它会弹出提示列表,然后选择“color:”

<a style="color:_" >

我再次按^ X- ^ O,它会弹出正确的提示(“rgb(”,“#”),但同时会删除前一个单词,如下所示:

<a style="rgb(_" >

有人能给我一些帮助吗?非常感谢。这是我的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 

2 个答案:

答案 0 :(得分:0)

这是htmlcomplete.vim脚本中的错误。您可以通过在属性和值之间插入<Space>来解决此问题,正如romainl指出的那样。

请向剧本作者Mikolaj Machowski提交错误报告(基本上是此页面的链接);他的电子邮件地址在脚本的标题中;该脚本位于Vim安装目录中的autoload/htmlcomplete.vim

由于最后一次更改是从2011年4月开始,作者仍然很有可能继续维护它。如果您没有得到回复,请通知vim_dev邮件列表(cp。http://www.vim.org/community.php;您需要先注册)关于此;希望有人会接受它。

答案 1 :(得分:0)

这是一个错误,并且是vim较新版本的回归。该csscomplete.vim插件是为较早版本编写的,而您使用的是较新版本,则会出现意外的回归。

如果您对插件进行了黑客攻击,则会看到删除的发生,因为它将反向移动光标以寻找最明显的上下文,并且反向光标的移动被vim解释为擦除。

对我来说,错误在于以下几行:

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

所以,这是您的问题:名为start的变量通过omnifunc传递回vim,而vim则将现有文本保留为原样,但是较新的版本将该动作解释为擦除。

因此,更改第二个while子句条件以声明连字符,现在您可以开始比赛了。但这暴露了一个新问题,因为csscomplete.vim陷入困境,键入字母并启动omnifunc会变慢。但是,嘿,一次出现一个问题。

这就像购买将方向盘安装在车顶上的汽车一样。就像是行不通的家伙。但这是Vim,如果您不属于低级黑客,那么您来的是错误的机器商店。