2010年8月15日星期日

Vim学习笔记(一) --- 安装与配置

博客看多了,自然容易受到博主的影响。我最近就发现自己越来越受到善用佳软的影响:花了150大洋注册了TC(Total Commander),把ClipX换成Ditto,今天则终于下决心卸载了UltraEdit改装Vim。

当然用Vim的最大原因还是因为其功能强大且免费。虽然我并不会编程,但有时还是要和代码打交道,比如修改Firefox的一些GM脚本和UC脚本。另外以前用WinEdt写文章时,经常会把Tex文件拿到UltraEdit里来处理下,毕竟WinEdt的编辑功能还是弱了点。看到善用佳软说Vim要比UltraEdit高一个档次,而且最近又一直在尽力减少电脑上的盗版软件,就决定把UltraEdit卸载掉,认真学学Vim。

不过真正学起来才发现Vim的学习曲线实在陡峭,命令难记不说,光是乱码问题就折腾了我一下午。想在这里把自己折腾时的一些体会记录下来,以后或许能用得到。


  • 安装过程
Vim主页下载安装程序之后,本来把Vim装在C盘,后来发现Vim的配置文件非常重要,自己又不爱备份,如果哪天重装系统时丢失了配置文件损失太大,就卸载后改装在E:\Tools中。安装过程中可以去掉添加右键菜单的选项。

Vim的帮助是英文的,中文帮助需要另外安装,我下载的是win32 installation program,下载第二个Unicode版本应该也可以(没试过)。不知为何安装中文帮助时安装程序不能找到安装目录,我将其指定为E:\Tools\Vim\安装后仍不能显示中文帮助,后来几经折腾才发现要将安装目录设为E:\Tools\Vim\vim72\。想要卸载该中文帮助只需到e:\Tools\Vim\vimfiles\doc\下执行vimcdoc-uninst.exe就行了。只是不知为何该帮助程序会在c:\Program Files (x86)\下生成vimcdoc目录,里面放置了一些该中文帮助的使用说明。我干脆将该目录移到了E:\Tools中,好像没出现什么问题。

  • 乱码问题
安装中文帮助后Vim菜单会出现乱码,后来在网上查了下,需要将e:\Tools\Vim\vimfiles\plugin\vimcdoc.vim中的
set encoding=utf-8
一行注释掉(在前面加上")。

可是这时打开某些文档仍然会出现乱码(比如把网页保存为html后打开),后来又是在网上找到了解决办法:在e:\Tools\Vim\_vimrc中加入
" 防止乱码
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
  • 配置文件
上面提到的_vimrc就是配置文件,网上可以搜到许多大牛的配置文件,很多内容都可以参考。不过有些东西还是得自己调试,比如为了不让Vim保存时自动生成备份(以~结尾),我在_vimrc中加入了
" 不备份
set nobackup
set nowritebackup
可是Vim依然生成备份,后来才知道这些代码必须添加在
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
的后面。

把我目前在用的配置文件在这里备份下吧,以后我会一直更新的。
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

" 防止乱码
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
" 界面字体
set guifont=Courier\ New:h15
" 启动时最大化
au GUIEnter * simalt ~x
" 颜色配置
colorscheme evening
" 显示行号
set number
" 不备份
set nobackup
set nowritebackup
" 打开javascript折叠
let b:javascript_fold=1
" 打开javascript对dom、html和css的高亮支持
let javascript_enable_domhtmlcss=1

set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\ ' . arg3 . eq
endfunction