htmlcomplete#CompleteTags 的 bug

今天又在玩 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 行:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值