2

我正在用 gvim 编写 HTML,但让我烦恼的是,omni-complete 总是删除我以前的单词,甚至是我以前选择的单词。

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

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

按^X-^O后,弹出提示列表,我选择“颜色:”

<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 
4

3 回答 3

0

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

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

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

于 2012-09-14T14:34:09.870 回答
0

让 csscomplete.vim 来处理 html 补全可能是我的问题的解决方案。您可以通过在 gvimrc 中添加“autocmd FileType html set omnifunc=csscomplete#CompleteCSS”来做到这一点。

于 2012-09-15T03:56:46.990 回答
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,如果你不是为了低级黑客而参与其中,那么你就在错误的机器车间。

于 2019-01-04T04:24:56.450 回答