注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

(power up)

道可道,非常道。

 
 
 

日志

 
 
 
 

htmlcomplete#CompleteTags 的 bug  

2011-10-12 18:41:02|  分类: Vim |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天又在玩 vim 自動完成時發現的,網路上也有找到一點點情報,不過資料實在很少,我花了不少時間測試找出會發生問題的狀況,這個 bug 是在使用autocomplpop時,游標放到 class=" or id=" 這兩個字串後會有錯誤訊息 (line 304, E121: Undefined variable :classlines)。網路上找到有人回報給 acp.vim 作者,日本那邊也有人hack acp.vim 來避開這個問題,不過其實問題不在 autocomplpop,而是 vim 內的 htmlcomplete 的問題,這個 function 位置在 $VIMRUNTIME/autoload/htmlcomplete.vim ,上次更新是 2006 年了,之後回報 bug 會不會有人修還不知道XD。

這個錯誤訊息的發生條件其實很特別,首先 html 的 omnifunc 要設成 htmlcomplete#CompleteTags,就是說你的 vimrc 裡面應該會有一行長成

autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

再來你正在編輯的 html 文件裡面要有 <link rel="stylesheet" /> 這種外連 CSS 檔案的標籤,而關鍵是 href 指到的位置沒有一個可以用的檔案(不存在、無權限讀取都可),然後接下來你在 class=" 或是 id=" 的位置裡面執行了 omni complete (<C-x>, <C-o>) ,當然如果有裝autocomplpop的話,這時就會自動幫你跑(2.7 版以後),錯誤訊息也就會自動冒出。

問題發生的原因是,這個 html 自動完成函式會去檢查你的 CSS ,包括外連的檔案,去裡面把 class name, id name 抽出送回作自動完成的選項,不過他有一個動作應該是要檔案可讀才要跑的,卻放到 if 的外面,所以只要把它移過去就好了,錯誤那行 code 是 310 行:

:e $VIMRUNTIME/autoload/htmlcomplete.vim

308        endif 309    " We gathered classes definitions from all external files 310    let classes += classlines

把它移到 308 行的 endif 前面就好了:

308        " We gathered classes definitions from all external files 309        let classes += classlines 310    endif

转载自(http://blog.othree.net/log/2009/12/25/bug-of-html-complete/)


  评论这张
 
阅读(207)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017