前些日子为了用vim完成中文段落重排,在大家起来学vim的教程中找到了一个format.vim,用了一下,觉得不错,终于用gq和gqq来重排中文了。今天写总结的时候,发现标点符号的重排不对,打开format.vim看了一下,发现中文的逗号,句号等都已经列在了不允许放在句首的变量中了,可怎么还是把它们放到了句首。决定自己找找原因,一路看下来,并在vim中试了试,发现原来是获取字符时用的长度不对。大家都来学vim的作者用的是cp935,中文的标点是2个字节的长度,而我用的是utf8中文的标点是3个字节的长度,这样在判断标点时获取的就不是完整的了,于是就没有认出utf8下的标点。把非ascii的字节获取长度改为3后,一试OK了,嘻嘻。
想必也有不少和我一样希望vim能用gqq重排中文的同仁们,就把修正后的format.vim贴出来共享了。
format.vim.zip
是否此版本对于cp935用户亦可用?如是,当寄回给作者请他添加到他的发行版中。此外,utf8不一定总是3字节,数字节法是否可靠得需上下文才知道,这里提个醒。
不能,因为cp935的中文标点是2个字节的。
utf8字符确不一定是3字节,不过中文的标点是3字节的 :)