Vim知多少

Vim的官网

Vim最早在1991年由Bram Moolenaar发布,是Vi的一个改良版, 表示Vi IMproved.

Vi最早在1976年由Bill Joy发布。

Richard Stallman称Vi是魔鬼的编辑器(VI-VI-VI在罗马数字中表示兽名数目)。

Vi的支持者反讽Emacs是一个伟大的操作系统,只缺个体面的编辑器。两者有太多的往事不堪回首。

首页 » Vim » Vim与中文

Vim与中文

在用Vim处理中文文档时可能会遇到一些问题,特别是扩Linux、Windows等多个平台工作时。Vim内置了一些与语言、编码设置有关的选项,如果不注意使用,会导致乱码、存储失败等多个问题。

首先什么也不做,只是观察一下Vim的默认行为。测试环境有2个,1个是通过SecureCRT SSH连接到一台Linux,并且Linux的locale设置为zh_CN.UTF-8,另1个是在Win7简体中文版下,使用Gvim。

Linux下打开一个空文件测试:

$ vim /tmp/test
:se encoding        " 输出 encoding=utf-8 
:se fileencoding    " 输出 fileencoding=

Windows下打开一个空文件测试:

$ vim /tmp/test
:se encoding        " 输出 encoding=cp936
:se fileencoding    " 输出 fileencoding=

可见:se encoding的输出不同,Linux下是utf-8,Windows下是cp936(参考字符编码与字符集)。

Vim 中与编码相关的选项

Vim中有几个主要的选项与编码相关:

encoding - 设置Vim内部编码方式

encoding设置Vim内部编码方式,所谓内部编码,包括Vim使用的内存(缓冲区)、寄存器、变量等。

Vim把字符编码分为3个类别:

  1. 单字节编码,如Latin1
  2. 双字节编码,如cp936(Windows下简体中文), euc-cn(Unix下简体中文
  3. Unicode,如utf8

fileencodings - 按一定优先级自动检测文件编码

通过fileencodings设置自动检查文件编码的次序:

set fileencodings=utf-8,chinese,latin-1

Vim首先用utf-8匹配,如果失败,尝试用chinese,这里chinese会被Vim自动转换为cp936(Windows)或euc-cn(Unix)。最后,如果都匹配不上,就使用latin-1。

打开指定文档时使用某种编码

例如打开所有VimWiki文件使用utf8编码:

autocmd BufNewFile,BufRead *.wiki e ++enc=utf8

Windows Gvim 与 UTF8

在Windows下用处理utf-8文档有几个技巧。

如果直接设置:se encoding=utf8将导致整个Vim环境变为utf8,此时你看到的头部的文档文件名、底部的文档状态,都变为乱码了,执行:w也可能无法存储文件(因为文件名中含有Windows文件名禁用的符号,如<, >):

要阅读或者编辑utf8的文档,可以使用命令:se ++enc=utf8。

Linux Vim处理中文标点

Linux下Vim处理中文标点,特别是中文引号、拼音等,可能出现混乱,将屏幕弄得一团糟。解决方法是在~/.vimrc中配置:

set ambiwidth=double

ambi是ambiguous(不明确)的缩写,ambiwidth意思是不明宽度字符。 在Unicode字符集中,某些同时在东西方语言中使用的字符, 如省略号、破折号、书名号和全角引号, 在西文中这些字符宽度等同普通ASCII字符, 而在东方文字中这些字符等同两倍普通ASCII字符。

分享

0