上一章我们介绍了会话(session)文件和viminfo文件,其中‘sessionoptions’选项和‘viminfo’选项的配置可能会根据你的需要进行调整。但如何保存你所做的调整呢?我们将在这一章中介绍。
本节所用命令的帮助入口:
:help compatible :help mapleader :help map :help autocmd
为什么我的vim这么难用?不能语法高亮,没有折行,不能打开多个窗口多个buffer,不能……
为什么别人用几个键就可以完成一个很复杂的功能,而我不能?
为什么别人的vim看起来和我的很不一样?
……
当你开始问这些问题的时候,是时候去检查一下你的vimrc了。
当vim在启动时,如果没有找到vimrc或gvimrc,它缺省工作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 <silent> <leader>ss :source ~/.vimrc<cr> 6 "Fast editing of .vimrc 7 map <silent> <leader>ee :e ~/.vimrc<cr> 8 "When .vimrc is edited, reload it 9 autocmd! bufwritepost .vimrc source ~/.vimrc
为了方便解释,我给每一行都加了一个行号。
- 在vimrc中,双引号开头的行,将被当作注释忽略。
-
第2行,用来设置mapleader变量,当mapleader为未设置或为空时,使用缺省的”\”来作为mapleader。
mapleader变量是作用是什么呢?看下面的介绍。
- 第5行定义了一个映射(map),这个映射把<leader>ss,映射为命令:source ~/.vimrc<cr>。当定义一个映射时,可以使用<leader>前缀。而在映射生效时,vim会把<leader>替换成mapleader变量的值。也就是说,我们这里定义的<leader>ss在使用时就变成了”,ss“,当输入这一快捷方式时,就会source一次~/.vimrc文件(也就是重新执行一遍.vimrc文件)。
- 第7行,定义了<leader>ee快捷键,当输入,ee时,会打开~/.vimrc进行编辑。
- 第9行,定义了一个自动命令,每次写入.vimrc后,都会执行这个自动命令,source一次~/.vimrc文件。
有了上面的快捷键,我们就能快速的打开vimrc文件编辑,快速重新source vimrc文件,方便多了。
无论在windows还是在linux中,我都使用vim作为我的缺省编辑器。并且,我想使用同一个vimrc文件。因此,我定义了一个MySys()函数,用来区分不同的平台,以进行不同的配置。
另外,在编辑vimrc文件时,我更喜欢新开一个标签页来编辑,而不是在当前窗口中。因此,我定义了SwitchToBuf()函数,它在所有标签页的窗口中查找指定的文件名,如果找到这样一个窗口,就跳到此窗口中;否则,它新建一个标签页来打开vimrc文件。(注:标签页(tab)功能只有在vim 7.0版本以上才支持。)
下面是我的vimrc中使用的设定,希望能够抛砖引玉:
" Platform function! MySys() if has("win32") return "windows" else return "linux" endif endfunction function! SwitchToBuf(filename) "let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "") " find in current tab let bufwinnr = bufwinnr(a:filename) if bufwinnr != -1 exec bufwinnr . "wincmd w" return else " find in each tab tabfirst let tab = 1 while tab <= tabpagenr("$") let bufwinnr = bufwinnr(a:filename) 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 " . a:filename endif endfunction "Fast edit vimrc if MySys() == 'linux' "Fast reloading of the .vimrc map <silent> <leader>ss :source ~/.vimrc<cr> "Fast editing of .vimrc map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr> "When .vimrc is edited, reload it autocmd! bufwritepost .vimrc source ~/.vimrc elseif MySys() == 'windows' " Set helplang set helplang=cn "Fast reloading of the _vimrc map <silent> <leader>ss :source ~/_vimrc<cr> "Fast editing of _vimrc map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr> "When _vimrc is edited, reload it autocmd! bufwritepost _vimrc source ~/_vimrc endif " For windows version if MySys() == 'windows' source $VIMRUNTIME/mswin.vim behave mswin endif
注意:我在windows中也定义一个”HOME”环境变量,然后把_vimrc放在”HOME”环境变量所指向的目录中。如果你打算在windows中使用上面的设定,也需要这样做!
好了,现在我们知道如何永久更改‘sessionoptions’选项和‘viminfo’选项了,把对它们的配置放入你的vimrc即可。
vim自带的示例vimrc中,只定义最基本的配置。
在http://www.amix.dk/vim/vimrc.html有一个非常强大的vimrc,有人戏称为”史上最强的vimrc”,或许有些言过其实。不过,如果你通读了这个vimrc,相信能从中学到很多……
这里有一个redguardtoo修改过的版本,可以对照参考一下。
我的vimrc也是基于Amix的模板,然后自已做了很多修改。
建议:不要照拷这个vimrc!可能这个文件的设定并不符合你的习惯。另外,这个文件的设定,可能也不能在你的工作环境中运行。
[参考文档]
能请教一个问题吗?
我想设置用vim打开文件的时候光标就在最后一行
这个可以通过在vimrc里面写某个命令实现吗?
谢谢🙏
如果你是用命令行启动vim的话,只需要加一个参数 + 就可以了,例如:
vim + abc.txt
如果是想用vimrc实现此功能,加一条自动命令就可以了:
audocmd BufEnter * :$
vim进入到文件后,按下$,光标直接显示在最后。
在.vimrc里面写上
au BufWinEnter * silent $
“Set mapleader
2 let mapleader = “,”
3
4 “Fast reloading of the .vimrc
5 map ss :source ~/.vimrc
6 “Fast editing of .vimrc
7 map ee :e ~/.vimrc
8 “When .vimrc is edited, reload it
9 autocmd! bufwritepost .vimrc source ~/.vimrc
用了这段配置发现 在命令行并不能使用[,ss] 或者[,ee]命令
主要是那个e命令怎么用
懂了
求问如何解决的,我也试拷贝了这一段,但是在vim中用的时候,显示not an editor command :,ss
谢谢!
搞明白了,模式使用错误。谢谢博主分享,收益良多!
怎么解决的,我也有同样的问题
我试着去感谢那些曾经从他们那里得到帮助的人们,在学习的道路上,是你们为我指明了方向,谢谢
@alpha
我找到原因了 ,在终端下和是同样的,这个vimrc把给imap了
LZ有个问题想问你一下,就是我使用了Amix的模板,然后发现退格键在插入模式下无法删除字符,我看了这个模板,只找到几处跟backspace有关的代码,但是这几处我去掉之后也无法让退格键删除字符,请问能帮下忙吗?
用心写出来的文章,顶一下楼主!
@互联网的菜鸟~^~
没看懂你的问题…请详细描述一下
tab切换的快捷键是?
在此受教颇多,非常感谢【Easwy】。也感谢跟帖的网友让这篇文章含金更高。
正在学习,特来感谢楼主
受教了…. 学了些东西。特来感谢 + 马克下…
博主,厉害!强烈顶一个!
博主,有个环境变量如果在你脚本使用的话可能会更方便。
不论在Linux还是Windows,vim中有个叫$MYVIMRC的变量可以用来替代vimrc的路径的。
建议博主试试~~~~~~
真的也
杨兄:请教两个小问题:
1.我在.vimrc中设置:
34 if &diff
35 “echo “in diff mode”
36 set wrap
37 endif
但不知为什么vimdiff 1.txt 2.txt 进入vim后长行没有wrap?
2. :bufdo 是否只对某些命令起作用?我逐个buf执行 :diffoff命令可以起作用,但执行:bufdo diffoff命令不起作用,见:
http://topic.csdn.net/u/20110401/21/ae5cb88f-390c-46d7-81d1-76efd7b77056.html?seed=1911946887&r=72556971#r_72556971
@karlzheng
我很少用中文做目录名,所以没遇到过
vim.gnome应该是编译了GTK图形界面的版本,vim.basic似乎只包含vim的基本功能?
我一般是自己编译vim,这样可以根据需要打开自己所需的功能。我的博客上有篇文章介绍如何在Ubuntu下编译vim的
请教杨兄:
Ubuntu中文目录下vim退出后乱码 是为什么?
解决方法如下:
http://blog.csdn.net/rainday0310/archive/2010/12/20/6086266.aspx
请问: /usr/bin/vim.gnome 和 /usr/bin/vim.basic
有什么不同?
好的,谢谢!
看来这个g:last_work_path在Ex命令行还是可以寻址得到的;只是:cd用不到它…呵
@karlzheng
:exec “cd ” . g:last_work_path
再请教一下:在vim中有一个变量:g:last_work_path
在Ex命令行可以执行如下命令:
:echo last_work_path
但执行:
:cd last_work_path
会报错
请问在Ex命令行应用怎样才能使用变量g:last_work_path?
@karlzheng
试试fnameescape()
请教杨兄:我自己写的函数如下:
function! My_ChangeToFilePath()
try
if exists(g:last_work_path)
g:last_last_work_path = g:last_work_path
endif
catch
endtry
let g:last_work_path = getcwd()
“let str = “\””.expand(“%:p:h”).”\””
let str = expand(“%:p:h”)
“str = escape(str, ” “)
execute “cd “.str
endfunction
nmap cd :call My_ChangeToFilePath()
我想把 获取到如:”/tmp/test abc/”这样的路径中的空格转义,请问应该调用什么函数?
very helpful:) Thanks indeed!
@karlzheng
vim中预定义的键可以在这个文档中看到:
:help index
先另外请教一个相关的问题:如果是自己定义的键,我可以用 :map命令来查看;
但如果是系统定义的键,比如说插入模式下的ctrl+o、ctrl+c等组合键,用什么命令来查看--1、下回vim升级的我才能知道它本身就有这样的键;2、我自己定义的键不要和它相同,比如说如果能查看到已定义了ctrl+j的功能那我就不要把ctrl+j定义为向下3行
请问现在怎么知道ctrl+j是不是系统有响应功能的键?
@karlzheng
1. 先定义一个函数,例如
function! StepDown(step)
其中step是你想移动的步长。你需要把它记下来。
2. 你常用的步长应该不太多,我觉得多映射几个快捷键,比较好,例如”,j5″是向下移5行,”,j8″是向下移8行…这些快捷键调用上面的函数。
3. 另外再映射一个快捷键,例如”,jj”,用来重复上面的步长移动。这个快捷键用的比较多,可以定义成最顺手的。
@karlzheng
你是问function后面的!吗,看这个帮助: :help E127
第3点,请问具体步骤怎么做? 用cursor函数吗? 怎么把调用的步长传给函数?
之前问的第二个问题是:
2、上面中的’\!’是标识在当前脚本中有效?--具体有什么作用?能不能举个简单的例子?
(字符被wordpress滤掉了)
@karlzheng
1. 这个脚本是我从其它vimrc中拷贝出来的,作用是在关闭当前缓冲区时,不改变窗口的布局。如果直接使用:bd,是有可能改变窗口布局的。
脚本首先把当前缓冲区号保存下来,然后尝试切换缓冲区,上面那段话是指如果切换了缓冲区失败,表明当前缓冲区已经是最后一个buffer了,为了不改变窗口布局,需要new一个空的。
3. 我觉得可以这样做:你自己映射一个移动命令,比如”,j”,那么”,j5“表示向下移5行,你在映射中把步长保存下来,接下来就可以使用另外一个命令来重复这个步长。不知道这样使用起来会不会不方便。
请教杨兄几个小问题:
1、下了你的_vimrc,下面这个函数:
419 function! BufcloseCloseIt()
和直接执行 :bd关闭当前缓冲区有什么区别?
429 if bufnr(“%”) == l:currentBufNum
430 new
431 endif
如果是当前缓冲区为什么要新开一个空的?
2、上面中的 是标识在当前脚本中有效?--具体有什么作用?能不能举个简单的例子?
3、 我现在在vim中看代码或写代码move的时候,往上或往下移动n行的时候,比如说 3j,3k之类的,很想有一个类似于f,t指令后按”;”键或”,”键这样的键,重复上一个移动的步长
请问在command模式下有没有办法定义?
@xiangwang
你打开你的.vimrc,把第41行的set mouse=a去掉就可以了
cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc
按你的方法做后,现在打开vim就出现如下情况,怎么解决呢?
请给个解决方法发我邮箱里好吗,因为我怕下次找不到这文章,而且也不能老是来看你回帖没有。谢谢
error detected while processing /root/.vimrc:
line 41:
E538:No mouse support:mouse=a
Press ENTER or type command to continue
@MoistRot
可以
@Easwy
请问,你那里写的在新tab里面打开文件只支持GUI 的vim吗?
命令行的可以吗?
@ysu
这个选项是属于buffer的选项,也就是每个缓冲区的设置不同。你当前缓冲区打开了什么类型的文件吗?或许是这种文件类型重新设置了该选项。
你试着在~/.vim文件夹以及/usr/share/vim下面搜索一下iskeyword或isk。
请教个问题,我的ubutu下,终端打开vim,iskeyword被修改成为iskeyword=a-z,A-Z,48-57,-
我在.vimrc中添加了一行set iskeyword
那么在启动vim时,可以看到提示 iskeyword=@,48-57,_,192-255
说明该关键字在加载完.vimrc后是正常的,可是当我进入vim后,
:set iskeyword 它又变成
iskeyword=a-z,A-Z,48-57,-
然后,我在~/.vim文件夹中搜索这个关键字iskeyword,也没有找到相关的改动。
想请教,这个关键字有可能在那被修改的。
谢谢。
@Kobe
vim在重新加载vimrc前不会清除已经生效的设置,所以,对syntax on之类命令来说,如果之前已经生效了,后面仅仅删除它并不能起到你期望的效果。
如果关闭vim再启动就不会有问题了。
@Easwy
非常感谢博主的回答!第一个问题已解决。
第二个问题,其实我是就 syntax on 举例:原先在未设置vimrc自动重载时,直接将 syntax on 删去,则只能重启,看到取消了高亮;设置vimrc自动重载后,按理说应该在将 syntax on 删去后就自动生效,直接取消高亮,但事实并非如此。我又测试了 set number 和 set ruler,情况类似。然而,若是直接改成 set nonumber 和 set noruler 则即时生效(类似于 syntax off)。
我猜测在重载vimrc时,若新设置与原设置矛盾冲突,则以新为准;若新设置未提及原设置的相关项目,则原设置的相关项目依然生效。不知对否?
当然,这不是什么大问题,我承认有些钻牛角尖了~
@Michael
你在windows里用vim,编码还是设成cp936比较好。
你可以读一下这篇文章:
正确设置 Vim 的字符编码选项 (gVim/Vim on Win32 中文环境)
@Kobe
上述错误是因为你再次加载vimrc时,vim发现函数XXX已经定义了,所以给出提示。要避免这个提示,你在定义XXX函数时需要使用:
function! XXX
:help E124
要想关闭语法高亮,要用syntax off命令:
:help :highlight-normal
@Easwy
我有一个新的问题了。
像我上面那样设置,vim不能正确传递<!dir f:\音乐>给pc命令行。
我的enc=utf8
但是如果我改回cp936,vim就能够传递成功。
而我又不希望改成cp936。
请问这该怎么解决呢?我想应该还有一个选项没有设置到才对。还望不吝赐教 :)
请问,对于自动source vimrc的命令:
autocmd! bufwritepost .vimrc source ~/.vimrc
我每次修改vimrc保存后总报错:
Function xxx already exists, add ! to replace it
其中xxx是我自定义的脚本名。这是何故?
另外,似乎上述命令只对“添加”设置立即生效,对“撤销”设置不生效。
例如,在vimrc文件中添加 syntax on 后则立即语法高亮;但是如果已有 syntax on 而将其注释掉,却仍然高亮语法。又是为何?
@Michael
对Win32 GUI和GTK2 GUI来说,第一句都没有必要设置
如果vim运行在终端中,而encoding的设置和你的locale不一样的话,就需要设置像上面那样设置,前两句的顺序是不能更改的。
Easwy 你好!
我是这样设置编码方式的:
let &termencoding = &encoding
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,gb18030,cp936
请教:前两句是不是顺序不能变?第一句在win-gui下是不是不需要设置?
@Michael
也就是说,在vim中,如果一个变量是定义在全局,那么它就会是全局变量,加不加g:前缀都一样
而在函数中要使用g:前缀,表明是引用一个全局变量
@Easwy
昨晚我问一个老外,他这样说:
g: is optional, except inside a function
具体的就没有解释了 :-D
你可以进一步解释下吗?
@Michael
这个映射在执行时,不会在命令行上把所映射的命令显示出来
:help :map-silent
在wordpress博客里输入<和>,要用<和>
@Michael
g:mapleader这句我也不是很理解,也许是定义一个全局的mapleader?
不过,在vim的帮助里没有讲这一点。
@Michael
中间的silent消失了,真奇怪。
map silent leaderss :source ~/.vimrc(省略了那个说都不能说的符号)
我想问的是silent在这里是什么意思?
map ee :e ~/.vimrc
请教各位达人, 在这里是什么意思?
没有不影响使用,还望释惑 :)
据称史上最强VIM配置:
http://amix.dk/vim/vimrc.html
还有一句:
g:mapleader
请问各位达人这是什么意思?
我是Windows下使用vim。
@Easwy
以前确实都是在命令模式下输入,ss,改成在Normal模式下就ok了,看来还是对vim的几种模式没有理解透啊,呵呵。
非常感谢楼主的解答!
@embob
你可能是用法错了,是在Normal模式下直接按,ss,而不是输入:,ss。
请教一个问题:
在增加了以下脚本以后,不能生效,出现“E492,不是编辑器的命令:,ss”。
按照楼主的教程,基本的.vimrc配置、ctag、winmanger基本都搞定了,卡在这个问题好几天了,google了一下,也没找原因,楼主帮忙解答一下,谢啦!
“Set mapleader
let mapleader = “,”
“Fast reloading of the .vimrc
map ,ss :source ~/.vimrc
“Fast editing of .vimrc
map ee :e ~/.vimrc
“When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
好的 谢谢!
@karl
$VIM和$VIMRUNTIME是两个特殊的环境变量,不需要用户来定义的。我上面给出的帮助里说了vi如何设置这两个环境变量。
至于其它的环境变量,则来自你系统中环境变量的定义了。
:help expr-env
1、这两个环境变量好像不是在我的电脑–属性里设置的?
2、请问有没有列表这些环境变量的命令--如果我知道用exists(“$VIM”)中的$VIM, 也就不用判断有没有这个变量了 呵
@karl
:help exists()
另外,$VIM和$VIMRUNTIME是环境变量,不是变量
:help $VIM
:help $VIMRUNTIME
用:let 好像没看到 $vim这个变量。。。另一方面,let是set变量值,我想看是否有$vim这个变量怎么办?
@karl
用这条命令:
:let
:help let
再请教一下博主,我想看vim中有哪些变量:比如说下面:
这个中的 $vim变量。。用什么命令?是否有像:show variables之类的命令?
@ironox
命令错了,“:!source .vimrc”是在执行shell命令了
应该是“:source .vimrc”
谢谢楼主的教程!
奇怪了,我改了以后,
source .vimrc
竟然文件开头的几行注释 都报错。是
怎么回事啊,是不是我犯了什么低级错误
:!source .vimrc
[No write since last change]
.vimrc: line 2: An example for a vimrc file.
: command not found
.vimrc: line 4: Maintainer: Bram Moolenaar
: command not found
.vimrc: line 6:
: command not found
.vimrc: line 8: for Unix and OS/2: ~/.vimrc
: No such file or directory
.vimrc: line 10: for MS-DOS and Win32: /usr/share/vim\_vimrc
: No such file or directory
.vimrc: line 17: syntax error near unexpected token `(‘
.vimrc: line 17: `” Use Vim settings, rather then Vi settings (much better!).’
@juice
执行
:help :e
:e ~/.vimrc 什么意思?
(以下为CSDN评论的转帖)
#rain 发表于2008-06-21 09:25:56 IP: 210.77.10.*
你好,请教一下这句话是什么意思呢
let fullfn = substitute(a:filename, “^\\~/”, $HOME . “/”, “”),
我help了半天,也是云里雾里的,只知道是替代,
1) 我看substitute的语法是 s[ubstitute]/{pattern}{string}/[flags]
好像没有()的用法阿
2)a:filename 中的冒号是什么意思? “^\\~/”是过滤用么?该怎么解释?
刚刚接触vimrc,希望能详细解释一下,谢谢啦
2008-06-23 12:30:08作者回复
:help substitute()
这里用的substitute是其函数版本,作用是把~符号替换成$HOME变量所指定的home目录
这个函数有三个变量,第一个是原始字符串,也就是a:filename保存的字符串,第二个参数是被替换的内容,”^\\~/”是一个正则表达式,表示从字符串的起始查找~字符,两个\是转义字符,因为~符号在substitute函数中有特殊含义,而此处需要使用其本义。
#James 发表于2008-06-25 14:11:05 IP: 143.89.126.*
这个substitute是一个函数,你要:help substitute()
你help的内容其实是命令:substitute
两者不是一个东西
a:***表示的是参数列表中的变量
这里a:filename就是传进来的那个filename变量
“^\\~/”是一个正则表达式
#James 发表于2008-06-25 14:14:48 IP: 143.89.126.*
其实MySys可以变得更加”智能”一点
我在windows和linux下工作,可以如下定义
function! MySys()
if has(“win32”)
return “windows”
elseif has(“unix”)
return “linux”
else
return “”
endfunction
2008-07-08 09:56:37作者回复
嗯,这样实现更方便些。thanks.
#wayon_yang 发表于2008-09-20 08:54:12 IP: 166.111.60.*
收藏 先
(以下为CSDN评论的转帖)
#Kemin 发表于2007-10-27 17:10:59 IP: 219.134.249.*是什麽?$vim又是什麽,新手不太明白
有些地方沒說明白,
#Kemin 发表于2007-10-27 17:34:00 IP: 219.134.249.*” : ” as the first argument. Example: > ,h /Header
=============
$:
下面三个前缀用来访问特殊的数值
“$”——访问环境变量;
“&”——访问 Vim 选项;
“@”——访问寄存器。
==============
“
To define a mapping which will not be echoed on the command line, add
“
:map
#Kemin 发表于2007-10-27 17:45:29 IP: 219.134.249.*
系統沒有$VIM的環境變數,VIM有自己的環境變數?在哪裏查?
還有~/_vimrc找沒到這個文件,我用的是WINDOW,符號~指的不是VIM的安裝目錄
#easwy 发表于2007-10-29 11:06:43 IP: 213.70.90.*
$VIM是vim定义的变量,在vim中使用命令:
:echo $VIM
可以看到它的定义。类似的还有$VIMRUNTIME
windows里,你可以通过指定HOME环境变量,来定义“~”的位置