在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进 等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。 所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为: 此文讲解的是vim编辑多字节编码文档(中文)所要了解的一些基础知识,注意其没有涉及gvim,纯指字符终端下的vim。 ------------------------------- 1,存在3个变量: 由此可见,编辑不同编码文件需要注意的地方不仅仅是这3个变量,还有系统当前locale和、文件本身编码以及自动编码识别、客户运行vim的终端所使用的编码类型3个关键点,这3个关键点影响着3个变量的设定。 再来看一下常见情况下这三个关键点的值以及在这种情况下这3个变量的值: 3,客户运行vim的终端所使用的编码类型—-同第二条一样,这也是一个比较难以断定的关键点。第二个关键点决定着从文件读取内容和写入内容到文件 时使用的编码,而此关键点则决定vim输出内容到终端时使用的编码,如果此编码类型和终端认为它收到的数据的编码类型不同,则又会产生乱码问题。在 linux本地X环境下,一般终端都认为其接收的数据的编码类型和系统locale类型相符,因此不需关心此方面是否存在问题。但如果牵涉到远程终端,例 如ssh登录服务器,则问题就有可能出现了。例如从1台locale为GB2310的系统(称作客户机)ssh到locale为utf-8的系统(称作服 务器)并开启vim编辑文档,在不加任何改动的情况下,服务器返回的数据为utf-8的,但客户机认为服务器返回的数据是gb2312的,按照 gb2312来解释数据,则肯定就是乱码了,这时就需要设置termencoding为gb2312来解决这个问题。此问题更多出现在我们的 windows desktop机远程ssh登录服务器的情况下,这里牵扯到不同系统的编码转换问题。所以又与windows本身以及ssh客户端有很大相关性。在 windows下存在两种编码类型的软件,一种是本身就为unicode编码方式编写的软件,一种是ansi软件,也就是程序处理数据直接采用字节流,不 关心编码。前一种程序可以在任何语言的windows上正确显示多国语言,而后一种则编写在何种语言的系统上则只能在何种语言的系统上显示正确的文字。对 于这两种类型的程序,我们需要区别对待。以ssh客户端为例,我们使用的putty是unicode软件,而secure CRT则是ansi 软件。对于前者,我们要正确处理中文,只要保证vim输出到终端的编码为utf-8即可,就是termencoding=utf-8。但对于后者,一方面 我们要确认我们的windows系统默认代码页为cp936(中文windows默认值),另一方面要确认vim设置的termencoding= cp936。 最后来看看处理中文文档最典型的几种情况和设置方式: 1,系统locale是utf-8(很多linux系统默认的locale形式),编辑的文档是GB2312或GBK形式的(Windows记事本 默认保存形式,大部分编辑器也默认保存为这个形式,所以最常见),终端类型utf-8(也就是假定客户端是putty类的unicode软件) 2,情况与1基本相同,只是使用的ssh软件为secure CRT类ansi类软件。 vim打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。 解决方案1:首先要保证运行secure CRT的windows机器的默认代码页为CP936,这一点中文windows已经是默认设置了。其他的与上面方案1相同,只是要增加一步,:set termencoding=cp936 解决方案2:与上面方案2类似,不过最后一步修改termencoding省略即可,在此情况下需要的修改最少,只要以locale为zh_CN开 启vim,则encoding=euc-cn,fileencoding和termencoding都为空即为encoding的值,是最理想的一种情 况。 可见理解这3个关键点和3个参数的意义,对于编码问题有很大助力,以后就可以随心所欲的处理文档了,同时不仅仅是应用于vim,在其他需要编码转换的环境里,都可以应用类似的思路来处理问题解决问题。 最后推荐一款功能强大的windows下的ssh客户端—-xshell,它具有类似secure CRT一样的多tab 的ssh窗口的能力,但最为方便的是这款工具还有改变Term编码的功能,这样我们就可以不用频繁调整termencoding,只需在ssh软件里切换 编码即可,这是我用过的最为方便的ssh工具。它是商业软件,但非注册用户使用没有任何限制,只是30天试用期超出后会每次启动都提示注册,对于功能没有 丝毫影响。 ------------------------------------- 最后看到ubuntu中文站上一个完美解决的方法:在.vimrc加两句设置"设定文件编码类型,彻底解决中文编码问题 let &termencoding=&encoding set fileencodings=utf-8,gbk,ucs-bom,cp936 加上发现没有作用,那就是vim的哪个包没有安装,试试把包安完全一些。 |
设置vim语法高亮显示和自动缩进 二、接下来设置vim的配置文件 1、配置文件的位置 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件。 2、设置语法高亮显示 1) 打开vimrc,添加以下语句来使得语法高亮显示: syntax on 2) 如果此时语法还是没有高亮显示,那么在/etc目录下的profile文件中添加以下语句: export TERM=xterm-color 3、设置Windows风格的C/C++自动缩进(添加以下set语句到vimrc中) 1)设置(软)制表符宽度为4: set tabstop=4 set softtabstop=4 2)设置缩进的空格数为4 set shiftwidth=4 3)设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置: set autoindent 4)设置使用 C/C++ 语言的自动缩进方式: set cindent 5)设置C/C++语言的具体缩进方式(以我的windows风格为例): set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 6)如果想在左侧显示文本的行号,可以用以下语句: set nu 7)最后,如果没有下列语句,就加上吧: if &term=="xterm" set t_Co=8 set t_Sb=^[[4%dm set t_Sf=^[[3%dm endif
设置的顺序很重要,特别是高亮的设置,先set syn=cpp,再syntax on放在最后
附上本人的VIMRC
1 set number "显示行号"
2 if &term=="xterm"
3 set t_Co=8
4 set t_Sb=^[[4%dm
5 set t_Sf=^[[3%dm
6 endif
7 set syn=cpp
8 syn on
9 set cindent "C语言自动换行"
10 set shiftwidth=4 "设置缩进的空格为4"
11 set autoindent "每行的缩进值与上一行相等"
12 colorscheme desert
13 set scrolloff=5 "设定光标离窗口上下边界5行时窗口自动滚动"
14 set langmenu=zh_CN.utf-8
15 source $VIMRUNTIME/delmenu.vim
16 source $VIMRUNTIME/menu.vim