set nu set nobackup set noswapfile set noundofile set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set lines=25 columns=120 set textwidth=120 colorscheme desert set encoding=utf-8 set termencoding=GBK set fileencoding=chinese set fileencodings=ucs-bom,utf-8,gbk,cp936,gb2312,big5,euc-jp,euc-kr,latin1 set langmenu=zh_CN.utf-8 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim language messages zh_CN.utf-8
下面是使用的属性的说明:
1 shiftwidth
这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是符号移位长度的制定者。
2 tabstop
定义tab所等同的空格长度,一般来说最好设置成8,因为如果是其它值的话,可能引起文件在打印之类的场合中看起来很别扭。除非你设置了
expandtab模式,也就是把tabs转换成空格,这样的话就不会一起混淆,不过毕竟制表符为8是最常用最普遍的设置,所以一般还是不要改。
3 softtabstop
如果我们希望改变程序中的缩进怎么办?
shiftwidth和tabstop不一样的话,你会发现程序比较难看的。这时候,softtabstop就起作用了。可以从vim的说明中看到,一旦设置了softtabstop的值时,你按下tab键,
插入的是空格和tab制表符的混合,具体如何混合取决于你设定的softtabstop,举个例子,如果设定softtabstop=8, 那么按下tab键,插入的就是正常的一个制表符;如果设定 softtabstop=16,那么插入的就是两个制表符;如果softtabstop=12,那么插入的就是一个制表符加上4个空格;如果 softtabstop=4呢?那么一开始,插入的就是4个空格,
此时一旦你再按下一次tab,这次的四个空格就会和上次的四个空格组合起来变成一个制表符。换句话说,softtabstop是“逢8空格进1制表符”,前提是你tabstop=8。
4 关于expandtab
举个例子,在多人一起开发项目时,为了使代码风格尽量保持一致,一般不允许在代码使用TAB符,而以4个空格代之。我们可以编辑一个文件,包含下面的内容:
set shiftwidth=4
set expandtab
然后把下面的命令加入到.vimrc中:
autocmd FileType c,cpp set shiftwidth=4 | set expandtab
就可以只在编辑c和cpp文件时实行这种设置了
设置UTF-8 无BOM保存以及打开文件
set encoding=utf-8
set termencoding=utf-8
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,gbk,cp936,gb2312,big5,euc-jp,euc-kr,latin1
set langmenu=zh_CN.utf-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8
前面我已经发过相关的信息,然而或许是因为Google Group
本人还不熟练或是其他,貌似信息只是发给了VimIM兄。
VimIM兄给我回信说有一个好点儿的文档性质的东西最好,
我也这么觉得,但是本人写文档的水平可能有限,
经常会写成日记体,^_^不过个人风格也使得我写出来的基本上
都是科普性质的东西,尤其对新手而言应该能更容易接受。:D
好的结束自吹自擂,继续这个让我依然很是崩溃的话题:
Windows下Vim的中文支持问题。
这不应该是VimIM需要严格关注的问题,但是确是VimIM的基础
问题:显然,如果连中文支持都没有解决,何谈中文输入法?
在VimIM主页的【科普】章节已经介绍了许多:
http://vimim.googlecode.com/svn/vimim/vimim.html#vim
我现在要说的这些是基于本人的切身体会和摸索得到的。
由于本人目前仍然只能算是拼音用户,所以其他Feature
对我而言并没有太大的实用性,本人也没有进行相关测试。
Vim想要使用中文拼音输入法,需要设定encoding为UTF-8:
:set encoding=utf-8
但是我们知道,Windows下的默认编码是GBK,
通过自解压安装方式得到的GVim和Vim中,由于很多属性通过
系统获得,因而在简体中文系统下默认直接支持GBK简体
中文,所以encoding, fencoding, fencodings, tenc等等默认值
都是GBK,——这时候是没有问题的;同时也因为这个原因,
当我们把encoding改成UTF-8时才会出现这么多问题。
因此下面的问题就是解决因为上面这句引起的乱码问题。
1. 中文信息提示乱码。
信息提示的设定是通过language命令更改的:
:lan message zh_CN.UTF-8
这样会使得message为UTF-8编码,与encoding一致,从而
解决中文乱码问题。当然,您也可以通过设定成英文来回避
中文乱码:
:lan message en
2. GVim显示菜单乱码。
菜单的设定是通过lanmenu变量决定的:
:set lanmenu=zh_CN.UTF-8
但是,我们发现不论进不进行这项设定,菜单的乱码问题都在。
事实上GVim的菜单早在设定这个开关之前已经加载完成,所以
解决的方法是设定后重新加载菜单。(经测试即使不设定这个
变量,重新加载菜单总是能使菜单乱码消失。)
:source $VIMRUNTIME/delmenu.vim
:source $VIMRUNTIME/menu.vim
不过需要注意这会使得自定义菜单项被删除。
另外很多高手说GVim的菜单实际上没有什么帮助,所以或者
直接删掉不要也可以,或者改成英文来回避中文乱码。
3. Vim与Cmd
a. termencoding变量:
这个开关仅影响Vim而不影响图形界面的GVim。所以不使用
Windows 32 Console版本Vim的用户可以跳过。
由于Vim没有自己的显示机制,它是通过将字符传递给term
而通过term将文字显示出来,所以双方对传递的字符编码
要有一致的理解才能正常。对于Windows,这个Term一般就是
模仿DOS的那个命令提示符,Cmd.exe
Cmd的默认编码格式是GBK(而且貌似只能是GBK),因而
我们需要Vim用GBK编码向Cmd传送自己的数据,Cmd才能
把Vim想要显示的东西正常显示。这就要告诉Vim,term的
encoding是什么什么:
:set termencoding=GBK
从而能从Console版本的Vim中将UTF-8编码的各种信息转换成
GBK传递给Cmd从而显示出来。
b. Vim执行外部命令
通过上面的设置,我们的Windows版本GVim和Vim都可以
正常使用VimIM插件了,然而Vim最主要的功能并不是作为
汉字输入法。我们要通过它写程序等等,便不免要执行外部
命令,比如最常见的:make(严格说这不算”外部“,外部命令
以!开始,例如:!dir)
然而,我们原以为现在已经正常的Vim却在这儿再次出现问题。
——因为我们把encoding改掉了。
测试:开始运行cmd,输入vim回车(我们假设您安装GVim
时创建了相关的批处理文件,可以从cmd中直接执行它们)
打开Vim,然后输入:
:make
回车,你会发现很多乱码:Cmd的输出是乱码,Vim的提示
信息是乱码,——甚至连程序员赖以生存的QuickFix窗口,
也都是乱码。Oh这怎么得了?!
但问题远不止这些,即使是GVim执行外部命令,我们依然
看到到处都是乱码。
因为这个问题的原因,我几天来一直在试图解决它却没有任何
进展,所以没有将中文支持的这个Post出来。不过现在决定
把这个贴出来了,一来我发现自己应该是很难解决掉了,
需要高手支援,二来毕竟VimIM兄需要一个详细点儿的说明,
所以就先把我现在知道的这些稍加整理发过来。
向VimIM兄致歉,我远没有达到您的要求。8-P
另征求高手的解决方案,最好简单易行。:)