Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712288
  • 博文数量: 165
  • 博客积分: 8218
  • 博客等级: 中将
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 19:48
文章分类

全部博文(165)

文章存档

2014年(4)

2011年(3)

2010年(6)

2009年(43)

2008年(109)

分类: LINUX

2008-09-19 12:07:40

本节所用命令的帮助入口:

 :help compatible
:help mapleader
:help map
:help autocmd

 


为什么我的VIM这么难用?不能语法高亮,没有折行,不能打开多个窗口多个buffer,不能……

为什么别人用几个键就可以完成一个很复杂的功能,而我不能?

为什么别人的VIM看起来和我的很不一样?

……

 

当你开始问这些问题的时候,是时候去检查一下你的vimrc了。

VIM在启动时,如果没有找到vimrcgvimrc,它缺省工作VI兼容的模式。这意味着,你只能使用VI所具备的功能,而VIM中的大量扩展功能将无法使用。也许这就是你的VIM如此难用的原因。

VIM中自带了一个vimrc例子,让我们从这个例子开始吧。

下面我以Linux下的VIM为例,windows版本的VIM,会在后面提到。

示例的vimrc(名为vimrc_example.vim)通常位于/usr/share/vim/vimXXX/目录下,其中vimXXX与你所使用的VIM版本有关。

首先把这个示例的vimrc拷贝到相应的目录,在Linux下,应该把它拷贝到你的home目录下,名字为”.vimrc”,下面是shell命令:

cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc

或者你在VIM中执行下面的命令,和上面的shell命令完成相同的功能:

:!cp $VIMRUNTIME/vimrc_example.vim ~/.vimrc

现在,你退出VIM后再进入,你的VIM和刚才已经不一样了。 

你可以先读一下你的vimrc,看看它都设定了什么:

:e ~/.vimrc

这是一个注释良好的文件,不需要多解释。

 

windows版本的VIM,它已经缺省的有了一个vimrc,你可以在VIM在使用下面的命令来查看它:

:e $VIM/_vimrc

在这个文件中,它包含了上面提到的vimrc_example.vim。同时,它会把VIM设置的更符合windows的操作习惯。比如,支持CTRL-C拷贝,CTRL-V粘贴等等。Windows下的用户,可以使用$VIM/_vimrc来做为你的第一个vimrc

顺便提一句,在unix/linux中,文件名可以以”.”开头,表明此文件是隐藏的。而在windows中,不允许文件名以”.”开头,所以,windows版本的VIM,将读取_vimrc来做为自己的配置文件。

 

在今后使用VIM的日子里,你会频繁的更改你的vimrc。所以我们需要设置一些快捷方式,使我们能快速的访问vimrc

把下面这段内容拷贝到你的vimrc中:

1    "Set mapleader
2    let mapleader = ","
3
4    "Fast reloading of the .vimrc
5    map s :source ~/.vimrc
6    "Fast editing of .vimrc
7    map e :e ~/.vimrc
8    "When .vimrc is edited, reload it
9    autocmd! bufwritepost .vimrc source ~/.vimrc

为了方便解释,我给每一行都加了一个行号。

vimrc中,双引号开头的行,将被当作注释忽略。

2行,用来设置mapleader变量,当mapleader为未设置或为空时,使用缺省的“\”来作为mapleader

mapleader变量是作用是什么呢?我们先看下面。

5行定义了一个映射,这个映射把“s”,映射为命令“:source ~/.vimrc”。当定义一个映射时,可以使用前缀。而在映射生效时,VIM会把替换成mapleader变量的值。也就是说,我们这里定义的“s”,在使用时就变成了“,s”,当输入这一快捷方式时,就会source一次~/.vimrc文件(也就是重新执行一遍.vimrc文件)。

7行,定义了“e快捷键,当输入“,e”时,会打开~/.vimrc进行编辑。

9行,定义了一个自动命令,每次写入.vimrc后,都会执行这个自动命令,source一次~/.vimrc文件。

有了上面的快捷键,我们就能快速的打开vimrc文件编辑,快速重新source vimrc文件,方便多了。
 

无论在windows还是在linux中,我都使用VIM作为我的缺省编辑器。并且,我想使用同一个vimrc文件。因此,我定义了一个MySys()函数,用来区分不同的平台,以进行不同的配置。

另外,在编辑vimrc文件时,我更喜欢新开一个标签页来编辑,而不是在当前窗口中。因此,我定义了SwitchToBuf()函数,它在所有标签页的窗口中查找指定的文件名,如果找到这样一个窗口,就跳到此窗口中;否则,它新建一个标签页来打开vimrc文件。

下面是我的vimrc中使用的设定,希望能够抛砖引玉:

 

" Platform
function! MySys()
  return "linux"
endfunction

" Switch to buffer according to file name
function! SwitchToBuf(filename)
    let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
    " find in current tab
    let bufwinnr = bufwinnr(fullfn)
    if bufwinnr != -1
        exec bufwinnr . "wincmd w"
        return
    else
        " find in each tab
        tabfirst
        let tab = 1
        while tab <= tabpagenr("$")
            let bufwinnr = bufwinnr(fullfn)
            if bufwinnr != -1
                exec "normal " . tab . "gt"
                exec bufwinnr . "wincmd w"
                return
            endif
            tabnext
            let tab = tab + 1
        endwhile
        " not exist, new tab
        exec "tabnew " . fullfn
    endif
endfunction

"Fast edit vimrc
if MySys() == 'linux'
    "Fast reloading of the .vimrc
    map s :source ~/.vimrc
    "Fast editing of .vimrc
    map e :call SwitchToBuf("~/.vimrc")
    "When .vimrc is edited, reload it
    autocmd! bufwritepost .vimrc source ~/.vimrc
elseif MySys() == 'windows'
    "Fast reloading of the _vimrc
    map s :source ~/_vimrc
    "Fast editing of _vimrc
    map e :call SwitchToBuf("~/_vimrc")
    "When _vimrc is edited, reload it
    autocmd! bufwritepost _vimrc source ~/_vimrc
endif

注意:我在windows中也定义一个“HOME”环境变量,然后把_vimrc放在“HOME”环境变量所指向的目录中。如果你打算在windows中使用上面的设定,也需要这样做!

 

VIM自带的示例vimrc中,只定义最基本的配置。

有一个非常强大的vimrc,有人戏称为“史上最强的vimrc”,或许有些言过其实。不过,如果你通读了这个vimrc,相信能从中学到很多很多……

我的vimrc也是基于此模板,然后自已做了很多修改。

建议:不要照拷这个vimrc!可能这个文件的设定并不符合你的习惯。另外,这个文件的设定,可能也不能在你的工作环境中运行。

http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx,有一个redguardtoo修改过的版本,可以对照参考一下。

 

[参考文档]

1. VIM帮助文件

2.

3.

阅读(1689) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~