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 的。
这几天在设置 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 autumncat under
Vim
No Comments »