Archive for the 'Vim' Category

22nd Aug 2008

修复 tabbar.vim/minibufexpl.vim bug 一个

这几天在设置 Vim 环境,见一插件 tabbar.vim ,可快速切换 buffer,很爽。但这玩意是基于 minibufexpl.vim 写的,结果把 minibufexpl.vim 的一个 bug 都带来了。

以前试用过 minibufexpl.vim ,结果打开 ~ 结尾的文件就出一大堆错,故弃之。但这次这个 tabbar 很好用,于是花了几分钟把 bug 修复了。如下:

415     if (l:curBuf != -1)
416         call search('\['.l:curBuf.':'.expand('#'.l:curBuf.':t').'\]')
417     else
418         call <SID>DEBUG('Tb_Start: No current buffer to search for',9)
419     endif

问题就出在 415 行, search() 接受的是个 regexp ,所以一旦文件名中含有某些特定字符(例如 ~ ),就会导致出错。解决方法也很简单:转码(留意 417 行)。

415     if (l:curBuf != -1)
416         "call search('\['.l:curBuf.':'.expand('#'.l:curBuf.':t').'\]')
417         call search(escape('['.l:curBuf.':'.expand('#'.l:curBuf.':t').']','\\/.*$^~[]'))
418     else
419         call <SID>DEBUG('Tb_Start: No current buffer to search for',9)
420     endif

minibufexpl.vim 的问题也是一样道理。定位到 693 行,就会发现 tabbar.vim 那段是照搬 minibufexpl.vim 的。

Posted by Posted by autumncat under Filed under Vim Comments No Comments »