Lane East 的 blog

一百年很短,一秒钟很长

(g)vim for windows 的两个小补丁

2009-05-09 05:42

声明: 本人不对使用这两个补丁产生的问题作任何保证

vim for windows 设置 encoding 为 utf-8 时的问题 里面我做了一个补丁, 用来解决把 (g)vim 的 encoding 设置成 utf-8 时执行外部命令可能遇到的问题, 但是, 因为不能转码的字符会用 ‘?’ 来代替, 所以在操作文件的时候可能会产生较严重的后果, 想了想, vim 的编码转换应该会考虑到这一点的, 于是今天就又翻了一下代码, 发现果然有.

vim 在 vimconv_T 结构中定义了一个 vc_fail, 如果它为 TRUE 的话, 那么遇到不能转换的字符就返回 NULL, 而不是用 ‘?’ 来代替, 这样一来, 道理上简单的修改一下之前的补丁应该就可以了, 然而事实上却不是, 因为 vim 的 string_convert_ext 在 windows 上的实现并没有遵循 vc_fail 的设定, 于是做了一个 修正的补丁, 然后就可以通过判断转码之后返回的是否为 NULL 来进行判断了, 如果不能够转换编码, 则会显示一个“Can not convert string“的信息, 还有个 修正后的外部命令编码转换的补丁, 在执行外部命令的时候会根据需要来转换编码, 就可以防止上面说到的问题了. 当然, 如果修改 .po 文件的话, 可以做出汉语的提示, 不过做这个本来就是为了预防可能性很小的事件, 所以我也就不再去弄中文提示了. 为了找个试验的字符还花了点时间了, 如果你想试, 可以试试 :!echo ñ, 顺便给个截图吧:

之前我修改了 if_cscope.c 中类似的部分, 但是因为自己一直没用 vim 中 cscope 相关的内容, 所以这一次把这部分去掉了, 反正我也用不着, 也不知道那样的修改有用没用, 什么时候我试着使用 cscope 了再说吧(cscope 似乎是个不错的东西, 值得试一试)

同时还修改了上一次补丁中不符合 C 标准的部分: 变量声明没有在函数/块的开头部分, 用 gcc 编译没有问题, 但是我觉得还是修改了的好.

编译的方法可以参考 编译自己的 (g)Vim for windows

分类:

评论

  预览后可提交