Vim 对中文编码的支持

1、支持中文编码的基础 Vim要更好地支持中文编码需要两个特性:+multi_byte和+iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。 2、影响中文编码的设置项 Vim中有几个选项会影响对多字节编码的支持: encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的默认设置是cp936(GBK)。 fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。 fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。 termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。 3、Vim中的编码转换 Vim内部使用iconv库进行编码转换,如果这几个选项所设置的编码不一致,Vim就有可能会转换编码。打开已有文件时会从文件编码转换到encoding所设置的编码;保存文件时会从encoding设置的编码转换到fileencoding对应的编码。经常会看到Vim提示[已转换],这是表明Vim内部作了编码转换。终端环境下使用Vim,会从termencoding设置的编码转换到encoding设置的编码。 可以用|:help encoding-values|列出Vim支持的所有编码。 4、具体应用环境的设置 只编辑GBK编码的文件 set fileencodings=cp936 set fileencoding=cp936 set encoding=cp936 只编辑UTF-8编码的中文文件 set fileencodings=utf-8 set fileencoding=utf-8 set encoding=cp936 "或者 set encoding=utf-8 同时支持GBK和UTF-8编码 set fileencodings=ucs-bom,utf-8,cp936 set fileencoding=utf-8 set encoding=cp936 "或者 set encoding=utf-8 如果在终端环境下使用Vim,需要设置termencoding和终端所使用的编码一致。例如: set termencoding=cp936 "或者 set termencoding=utf-8 Windows记事本编辑UTF-8编码文件时会在文件头上加上三个字节的BOM:EFBBBF。如果fileencodings中设置ucs-bom的目的就是为了能够兼容用记事本编辑的文件,不需要的话可以去掉。Vim在保存UTF-8编码的文件时会去掉BOM。去掉BOM的最大好处是在Unix下能够使用cat a b>c来正确合并文件,这点经常被忽略。 5、FAQ 为什么在Vim中一次只能删除半个汉字? 因为encoding设置错误,把encoding设置为cp936就可以解决此问题。在Unix环境下Vim会根据locale来设置默认的encoding,如果没有正确设置locale并且没有设置encoding就会一次只能删除半个汉字。 VIM为什么不能输入繁体字? 把euc-cn或者GB2312改为cp936就可以了。euc-cn是GB2312的别名,不支持繁体汉字。cp936是GBK的别名,是GB2312的超集,可以支持繁体汉字。 VIM为什么提示不能转换? 因为在编译Vim时没有加入iconv选项,重新编译Vim才能解决。 如何打开一个GBK编码的文件并另存为UTf-8编码? 保存文件时运行命令|:set fileencoding=utf-8|就可以了。 From : CSDN Blog

2015年5月9日 · 1 分钟 · Jid

VIM查看文件编码、文件编码格式转换及文件名编码转换

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。 Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。 下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式。 如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容: set encoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。 文件编码转换 在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式 :set fileencoding=utf-8 iconv 转换,iconv的命令格式如下: iconv -f encoding -t encoding inputfile 比如将一个UTF-8 编码的文件转换成GBK编码 iconv -f GBK -t UTF-8 file1 -o file2 文件名编码转换: 从Linux往 windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。 在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。 首先看一下你的系统上是否安装了convmv,如果没安装的话用: yum -y install convmv 安装。 下面看一下convmv的具体用法: convmv -f 源编码 -t 新编码 [选项] 文件名 常用参数: -r 递归处理子文件夹 --notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。 --list 显示所有支持的编码 --unescap 可以做一下转义,比如把%20变成空格 比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下: ...

2015年5月9日 · 1 分钟 · Jid

Vim与系统粘贴板之间实现复制、粘贴

首先,用法: 从Vim拷贝到系统粘贴板: "+y 从系统粘贴板拷贝到Vim: "+p 或 Shitf + insert 其次,原理: 在vim里面,系统的粘贴板跟vim的寄存器+是关联的,所以你对寄存器加+的任何复制和粘贴都直接影响到系统的粘贴板。 vim有12个粘贴板,分别是0、1、2、…、9、a、“、+;用 :reg 命令可以查看各个粘贴板里的内容. 要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容(在visual模式下选中内容),然后按"Ny(注意带引号)完成复制,其中N为粘贴板号 (注意是按一下双引号然后按粘贴板号最后按y)(这里严格的说法应该是:N为寄存器编号),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了。 有两点需要说明一下: “号粘贴板(临时粘贴板)比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容; +号粘贴板是系统粘贴板,用"+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p; 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。 通过以上的说明,即可实现在不能的文件、不同的vim之间及vim与系统粘贴板之间的复制、粘贴。 另外,需要单独说明:默认情况下,ubuntu、opensuse等系统只安装了vim-base, 因此需要另外安装vim-enhance才可实现上面说讲。 转自: http://blog.csdn.net/ingvar08/article/details/6765595

2015年5月1日 · 1 分钟 · Jid

Vim自动跳到上次浏览文件时的位置

在Windows下用gvim,这个选项是默认打开的。也就是用vim打开文件时,可以记忆退出时的位置,从而再次打开就会直接跳到上次的位置。 该项控制命令写在$VIMRUNTIME/vimrc_example.vim下,可以把下面的命令拷贝到 {$HOME}/.vimrc 文件中,本方法尤其适用于Linux用户: " Only do this part when compiled with support for autocommands. if has("autocmd") filetype plugin indent on " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END else set autoindent " always set autoindenting on endif " has("autocmd")

2015年3月1日 · 1 分钟 · Jid