因为种种原因,我告别了从WIN95时代就开始使用的UltraEdit转向使用GVIM。在经历了显示乱码、大小写操作错乱等一系列问题后,慢慢摸熟了GVIM的脾气,渐渐开始享受使用的过程。
今天在GVIM下打印一份文本,却很遗憾的发现中文乱码又出现了,自己折腾了半天也没有解决,网上有人说在WINDOWS下encoding的编码模式要设为cp936,打印才能正常。试了一下虽然可行,但操作实在是太繁琐。
我的设置中encoding是utf-8(工作原因,不方便随意改),在命令模式设置set enc=cp936后会乱码,要在设置后重新输入中文才能正常显示和打印。打印完毕后如果把编码模式再设回成utf-8,则重新输入的中文又会乱码,真是相当麻烦。
那么如此麻烦的操作能否通过VIM自身的机制来自动完成呢?答案显然是可以,我的思路如下:
1 全选文本,利用系统剪贴板剪切文本
2 设置encoding=cp936
3 从系统剪帖板中复制出文本到空文件中
4 调用打印
5 全选文本,删除
6 设置encoding=utf-8
7 再从系统剪帖板中将文本复制回文件
这样做的目的是让文件在需要打印时临时转换成cp936编码,打印完成后再恢复到utf-8。
我将操作整合到,p这个快捷键,需要打印时直接按,p就可以了。(快捷键的定义虽然有些长,但只是简单命令的集合,配合上面1~7步骤自己看看,我就不解释了)
map ,p ggvG$"+yggvG$x:set enc=cp936<CR>"+P:hardcopy<CR>ggvG$"+yggvG$x:set enc=utf-8<CR>"+P
这个解决方案的缺点是,会使用系统剪贴板,如果里面有重要的内容那就要注意了。另外文件会由于一系列的操作变成为已修改状态。
虽然解决的方式也有些笨,但好在方便实用,有点小瑕疵也是可以接受的。在此记录下来,一是方便被同样问题困扰的朋友;二是抛个砖,如果哪位有更好的解决方案还请多指教。