在Vim中,基于单词的文本编辑命令是相当有用的。比如使用命令3dw即可删除三个单词。但是在中文中,由于存在相当烦人的分词问题,因此,也就无法实现这样的功能。
但情况远远比这更糟,vi设计之初就遵从的是KISS原则。标点符号和空格分词等,是写死的C代码中的,而Vim也是如此。反观Emacs,则是全部可以使用配置文件进行配置的。正是因为Emacs这种行事风格,也才导致了软件功能膨胀,不过确实提供了神一般的可定制性。
而关于中文分词,我的建议很简单:在Vim读入文件后使用外部工具进行分词,然后反馈给Vim插件,Vim插件检测用户光标的位置,并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。
不过这样有一些需要讨论的地方:
1.分词的准确性问题
中文分词一直是一个难题,除了大规模数学统计的方法可以获得较准确的结果外,只能指望今后的人工智能了:( 如果是这样,Vim的分词将不会给用户带来方便,而是烦恼——一些莫名奇妙的词语发生了改变,而不是想要的结果。
2.“大词”和“小词”
拿一个常见的词语来举个例子:发展中国家。这个词语在分词不准确的情况下会分成:发展/中国/家,而在分词准确的情况下则能正确将“中”分出来。但问题是,“发展中国家”单独也成一词。用户在一些情况下可能会希望对“发展中国家”为单位进行操作,但有时仅仅希望删去“发展”一词。如何权衡就是一个很大的问题了。
3.“分词线”
为了避免不可预测的分词结果带来反而难以操作的后果,“分词线”是一个需要实现的功能。即,在每一个分成的汉语词中添加下划线或是斜杠等符号来将词语隔开。但是要在Vim中实现“所见即所得”式的排版效果来显示出“删除线”,恐怕是无法解决的一大问题了,而Emacs可能还好一些。
另外,我对汉语分词技术的一点幻想是“定义词”。假如文章中有这么一句话:“我把它叫做一个‘集合’”,那么分词程序可以根据语义,实时的定义新词。先显然,基本无法实现。另外,我对Vim中中文的折行、不停切换输入法,和不支持中文引号匹配导致前后引号混用的问题也有些意见。显然,Emacs里自带输入法模块,没有此问题。据说VimIM可以解决汉语和vi命令冲突的问题?
欢迎大家对以上问题进行交流。
比尔盖子
发表评论