正确设置 Vim 的字符编码选项 (gVim/Vim on Win32 中文环境)
和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在 .vimrc 中改变它的值才有意义。
fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的 Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。
Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。
对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为 encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll (注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。
编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll
由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为 utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示 cp936,也就是 GBK 的代码页)。
以下是我的 .vimrc 中关于字符编码方式设置的内容,这个设置比较有弹性,可以根据系统中的环境变量 $LANG (当然,Windows 中的写法是 %LANG%) 的值来自动设置合适的字符编码方式。此时,推荐设置 %LANG% = zh_CN.UTF-8,可以通过后面的 Windows 注册表脚本文件来方便的做到。
" Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!
"
if has("multi_byte")
" When 'fileencodings' starts with 'ucs-bom', don't do this manually
"set bomb
set fileencodings=ucs-bom,chinese,taiwan,japan,korea,utf-8,latin1
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
set encoding=chinese
set termencoding=chinese
if &fileencoding == ''
set fileencoding=chinese
endif
elseif v:lang =~ "^zh_TW"
" Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
set encoding=taiwan
set termencoding=taiwan
if &fileencoding == ''
set fileencoding=taiwan
endif
elseif v:lang =~ "^ja_JP"
" Japanese, on Unix euc-jp, on MS-Windows cp932
set encoding=japan
set termencoding=japan
if &fileencoding == ''
set fileencoding=japan
endif
elseif v:lang =~ "^ko"
" Korean on Unix euc-kr, on MS-Windows cp949
set encoding=korea
set termencoding=korea
if &fileencoding == ''
set fileencoding=korea
endif
endif
" Detect UTF-8 locale, and override CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
endif
else
echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
endif
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\\Environment]
"LANG"="zh_CN.UTF-8"
注1: 事实上,Vim 的探测准确度并不高,尤其是在 encoding 没有设置为 utf-8 时。因此强烈建议将 encoding 设置为 utf-8,虽然如果你想 Vim 显示中文菜单和提示消息的话这样会带来另一个小问题。参见另一篇 Win32 下 Vim 设置 enconding 为 utf-8 会在显示特定消息时崩溃。(此处提到的崩溃问题在 gVim 7.0 beta 时代就已经被解决了。)
注2: 在 GNU 的 FTP 上可以下载到 iconv 的 Win32 版,不推荐去 GnuWin32 下载 libiconv,因为那个版本旧一些,并且需要自己改名 dll 文件。
分享到:
相关推荐
这些插件的整合,使得vim/gvim成为了一个功能强大的开发环境,即使没有图形界面,也能享受到便捷的开发体验。每个插件都有其独特的功能,相互配合可以大大提高编程的生产力。熟练掌握这些插件的使用,会让你在代码...
VIM(Vi IMproved)和GVIM是两个强大的文本编辑器,尤其在Linux环境中非常流行。它们提供了丰富的功能,让程序员和系统管理员可以高效地编辑代码。以下是对VIM和GVIM使用的一些关键知识点的详细解释: 1. **启动与...
解决Vim中文乱码问题需要从多个方面入手,包括调整字体显示编码、设置文件编码格式、解决菜单乱码和console提醒信息输出乱码等。通过这些设置,可以让Vim正确地显示中文,并提供良好的用户体验。
### Windows上gvim的编码设置详解 #### 一、引言 gvim 是 Vim 的图形界面版本,在 Windows 系统中被广泛使用。由于 Windows 默认采用 CP936 编码,而 gvim 默认采用 GB2312 编码打开文件,这往往会导致中文字符...
3. 如果遇到中文标题标签乱码或文件名中含有中文字符导致目录树显示不正确的问题,可以使用提供的补丁: - [补丁链接](http://att.newsmth.net/att.php?s.731.55149.150442.diff) - 或者使用修正后的 `taglist.vim...
为了提高工作效率以及个性化编辑环境,掌握 Vim 的颜色设置是非常必要的。本文将详细介绍 Vim 颜色设置的方法及步骤,并提供一些实用的技巧。 #### 二、基础概念 1. **Vim**: 一种高度可配置且功能强大的文本编辑...
9. **Unicode和编码支持** - 完善的Unicode支持,能处理多种字符集和编码。 **在CentOS x86上安装Vim 8.2的步骤:** 1. **更新系统** - 首先确保你的CentOS系统是最新的。 ``` sudo yum update ``` 2. **安装...
在gvim中打开UTF-8编码的中文文件时,如果gvim的内部编码设置与文件的实际编码不匹配,就可能出现中文乱码的情况。具体表现为中文字符被错误地解析,显示为乱码或特殊符号。 ### 二、gvim的内部编码设置 gvim的...
在Linux环境下,使用Vim编辑中文文本时可能会遇到乱码问题,这主要是因为Vim的字符编码设置不正确。要解决这个问题,我们需要了解Vim的几个关键编码选项以及它们的作用。 1. **encoding**: 这个选项决定了Vim内部...
- `.gvimrc`:与.vimrc类似,但专用于Gvim,可以设置图形界面特有的选项。 **4. 插件管理** - `Vundle`:一种流行的Vim插件管理工具,允许用户方便地安装、更新和管理插件。 - `NeoBundle`:另一个插件管理器,提供...
Vim是一款强大的文本编辑器,尤其在Linux环境下被广泛使用。它提供了丰富的功能,包括宏命令、多文件编辑支持、高效的文本导航方式以及灵活的编辑操作。本文将详细介绍Vim的一些核心特性及其使用方法。 #### 二、宏...
总之,配置Vim的字符编码设置是保证文本编辑体验的关键。通过合理设置`encoding`、`fileencodings`、`fileencoding`和`termencoding`,我们可以有效地处理各种编码的文件,避免乱码问题。同时,根据个人喜好调整图形...
VIM(Vi IMproved)是一款强大的文本编辑器,深受程序员和系统管理员的喜爱。它具有高度可配置性,允许用户自定义各种功能以适应不同的编程需求。在这个话题中,我们将聚焦于VIM中的“语法高亮”和“SystemVerilog...
本压缩包文件专注于为gvim(图形化版本的vim)提供对Verilog、VHDL以及System Verilog这三种硬件描述语言的高亮显示支持。下面将详细解释如何利用这些文件实现这一功能。 首先,让我们了解这三种语言。Verilog是...
- 用户可以通过`~/.vimrc`(Windows中是`$USERPROFILE/_vimrc`)文件定制Vim的行为,如设置默认编码、快捷键映射等。 - 可以在.vimrc文件中引入插件配置,使Vim具备更多功能。 总之,gVim是Windows用户享用Vim...
6. **文件编码识别**:Vim 7.4能够自动检测和处理不同编码的文件,确保在不同的语言环境下都能正确显示字符。 7. **撤销分支**:引入了撤销分支功能,使得撤销操作可以分步骤进行,用户可以选择回到操作历史中的...
在Linux系统中,Vim是一款极其强大的文本编辑器,它提供了丰富的配置选项,使得用户能够根据个人需求定制编辑环境。本文将深入探讨如何在Vim中设置tab键的宽度,以及这一设置对代码编写和阅读体验的影响。 ### Vim...
- **设置选项**:`:set number` 显示行号;`:set nonumber` 隐藏行号;`:set autoindent` 开启自动缩进;`:set noautoindent` 关闭自动缩进。 #### 七、总结 通过上述介绍,我们可以看到 Vim 的快捷键非常丰富,...
【标题】"Vi-vim-gvim快速学习"涵盖了在Linux和Unix系统中广泛使用的文本编辑器Vi(Visual Editor)的进阶版本Vim(Vi IMproved)及其图形化界面gvim的基本操作和高级技巧。Vi是一款强大的命令行文本编辑器,而Vim则...
Vim是一款极其强大的文本编辑器,...总之,通过正确配置Vim的UVM高亮,我们可以创建一个友好的编程环境,使得在编写和阅读UVM代码时更加轻松,同时减少错误的可能性。理解并定制这些配置能够进一步提升我们的开发体验。