本文来自依云's Blog,转载请注明。
Vim 7.3 增加了对 Python3 的支持,但其有不少 bug,从不能正确地向缓冲区中添加中文文本,到 buffer 对象不支持 slice 操作,vim.error 不是 BaseException 的子类而是一个 str,以及各种中文乱码/UnicodeDecodeError,让我这个 Python3 的坚定支持者非常郁闷,于是趁假期把 Vim 好好修理了一番。
此次修正历时两周,涉及 src/if_{py_both.h,python.c,python3.c},共 3 files changed, 308 insertions(+), 265 deletions(-),修正的具体项目为
- 向缓冲区添加文本时正确处理编码
- buffer 对象支持 slice 赋值
- vim.error 不再是字符串
- py3file 让 Python 检测文件编码
- 向 Python 传递缓冲区字符串时使用正确的编码(这解决了 gundo 在非 UTF-8 编码时的解码出错)
- py3 命令输入使用 'encoding' 解码后再以 UTF-8 编码(这解决了在 'encoding' 非 UTF-8 时含中文的 py3 命令的 SyntaxError)
- 向标准输出写文本时使用正确的编码(这样 print() 之类不会输出乱码)
以上数据要感谢git工具。
目前我在 Ubuntu Linux 10.10 32bit 和 Windows XP SP3 (使用 MinGW 编译)上测试没有问题,有兴趣的请帮忙再测试下。下载地址。
另外,附上 gundo 的 Python 2 & 3 兼容版以及使用 Python3 支持的 Python 补全插件 python3complete.vim(放到 ~/.vim/autoload 下)。
PS:Python3.2 发布了,增加了一些很好的新特性,比如argparse模块,str.format_map方法等等。
2011年3月3日更新:给 Vim 编译 Python3.2 支持也有些艰难,参见这篇文章。
2011年4月19日更新:今天解决了内存泄漏的问题,补丁已更新。另外,本补丁将在陈列室维护。
2011年6月19日更新:此补丁已被官方采纳。
Feb 22, 2011 11:46:12 AM
这个必须给力,我来下一个试试,届时我机器上将会有 3 个版本的 vim,呵呵。感谢 :)
Mar 14, 2011 10:08:59 PM
使用MinGW在Windows下编译,python2.7没有问题,一旦使用python3.2就崩溃,弹出对话框说Runtime Error!(Microsoft Visual C++ Runtime Library)
折磨我好几天了
Mar 14, 2011 11:42:45 PM
Python3.2 有一些变动(见文末的链接),所以出错是很正常的啦。这个补丁我测试时用的是 Python3.1。