vim在Locale为非UTF-8环境下的字符编码解决方案

非UTF-8环境,最常见的还是Windows了。

 

首先我们遇到的问题在这儿:

Vim探测汉字编码时使用fencs变量,这个变量推荐把utf-8编码放在前面,因为这样探测成功的概率较高。

非UTF-8环境(以gbk为例)下,我们新建一个文件通常希望以gbk作为fenc变量(文件编码)来保存。

但是默认会以fencs的第一个编码值来作为fenc(当然就是前面设置的utf-8),然后保存文件。

 

要说明一点的是,所谓新建一个文件,常见的有两种做法,一是用资源管理器的新建功能(或其他方式)建立一个空文件,然后用vim打开它编辑,我称之为方式甲;一种是直接在vim里用new foo.txt之类的命令创建新文件,我称之为方式乙。

两种方式的区别:

方式甲:打开的过程会执行编码探测,空文档嘛,所以打开完成后fenc变量自然就是utf-8了。

方式乙:在vim内部新建一个空文档,建立之后fenc变量为空,保存后,据我测试,用了windows的默认编码gbk,并将其设为fenc。

看来上面的困境主要发生在方式甲。

 

当然你可以在打开一个建立好了的空文档后自己去改fenc,为set fenc=gbk。

但是我受不鸟这种容易忘掉的机械劳动。

 

于是我的vimrc里关于文件编码的部分多了这么一段:

set fencs=utf-8,gbk
function SaveEmptyFile()
  if &l:modifiable && nextnonblank(1)==0
    set fenc=gbk
  endif
endfunction
autocmd BufNewFile,BufReadPost * call SaveEmptyFile()

 通俗理解就是加了个事件响应函数,在方式甲的文件打开后,和方式乙的空文档建立后,自动检测文档是否为空,如果为空就设置编码为gbk。虽然方式乙其实用不着处理。

 

你可能感兴趣的:(windows,vim)