修改vim的配置文件
1.新建一个文本文档a.txt
2.用gvim编辑a.txt,输入命令 :mkvimrc! ~/.vimrc
该命令会在 ~/
目录下新建一个 .vimrc
脚本文件,即c:\Users\yourName
,当前窗口的一些相关信息将会写入此文件中.
3.编辑 ~/.vimrc
文件,因为gvim
每次启动都会首先执行这个脚本,
可以在这个脚本加入一些命令,下面是我喜爱加入的一些命令,后面的中文是解释,不要加入
set nobackup 不备份文件,避免自动产生a.txt~备份文件
syntax on 语法高亮
set number 显示行数
colo elflord 设置颜色
set guifont=Consolas:h15:cANSI 设置字体为Consolas,字体大小h15,为西欧cANSI字符
set nocompatible
set ai 自动缩进
set si 智能缩进
set nu 显示行数
set ts=4 一个tab=4个空格
set bs=indent,eol,start
set guioptions-=T 无工具条
set
foldmethod=indent " 折叠方式为 依靠缩进
nnoremap
<space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
用空格键折叠/展开代码
附上两个VIM命令的网址:
http://www.blogjava.net/woxingwosu/archive/2007/09/06/125193.html
http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html
较全的vim命令
这是一篇较全的vim命令.
特记录下来,有稍作修改说明.
Vim常用命令
跳到指定的行号:
在命令行下直接输入:行号
比如跳到500行,输入:500即可
整体缩进的操作:
在命令行模式下,
按住shift+v
进入可视行选择状态,
使用shift加上下左右方向键
选择好整体的代码块,
然后再按住shift+>
或者shift+<
向右或者向左缩进即可整体缩进.
Vim多行缩进技巧
首先进入命令状态,然后按v
进入visual
状态,一定要在可视状态,
选择多行
注意这里的选择可不是用鼠标选择,而是使用shift+方向键
进行选择,用>
或<
缩进或缩出
gvim
1. 查找之后结果的高亮如何关闭?:noh
2. 显示菜单栏:set go=menu
3. 不显示菜单:set go=
4. 显示底部滚动条:set go+=b
5. 显示右侧和底部滚动条:set go+=rb
;
6. 智能补全;ctrl+x 后再ctrl+o或者ctrl+p;
7. vim在插入状态下按ctrl+p键就会显示你曾经输入过的字符
8. 「将当前光标下的列高亮」——:set cuc/set nocuc
光标移动:
1. w:光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b :与w相反
^ :移动光标到行首第一个非空字符上去
$ :移动光标到行尾第一个非空字符上去
% :移动到与制匹配的括号上去(),{},[],<>等.
nG :跳转到第n行.
可视模式
v :可视模式
V :选择行
CTRL-V or CTRL-Q :选择块
文本操作
y :复制选择的内容
ye :复制一个单词
yy :复制一行
p :粘贴
x :可视模式下,x为剪切选择内容
viw :选中光标当前所在处的单词
yiw :复制光标当前所在处的单词
vi下的复制方法
方法一:先ma标记当前位置为a,移动到新的位置,再ya或者y’a复制从标记位置a到 当前位置的内容.
和’的区别:以字符为单位,’以行为单位.这个方法应该是所有vi 都适用的.
<字母>[yy或者dd], 这里的寄存器就是要保存文本的那个寄存器,<字母> 是用来标记的,yy和dd是你的操作.
选择寄存器复制内容
这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验.
“< 字母>yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和 拷贝下来的东西的地方), <字母>里面的字母必须是a到z之间的一个. “<字母>dd可以把 一行剪切下来放到寄存器里面. 你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.如果<字母>中的字母是大写的话,意味着把文本插入到寄存器中已有的文本之前. “<字母>p把文本插入到光标之后,”<字母>P把文本插入到光标之前.如果寄存器中含有某一行的开头或结尾,这一行将会被放到另一合适的行. Y是yy的快捷方式. 还有, y$, yH, yM,等等,都是可以用的.d命令也是一样的.如果要快速的剪切和粘贴, 你就无须指定寄存器了.如果这样的话,你就不能往寄存器里面添加文本了.而且只要有一个删除命令的话, 寄存器中的东西就没有了(包括x命令). 举例来说,如果要移动上一段的话,你可以把光标 移到段落的开头,敲”a13dd,再把光标移到你想要放文本的地方,敲”ap,就可以把那段文本放到光标所在的行后面. 现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们 来看如何做到这一点:我们可以使用 m<字母> 命令来标记一个区域,这个字母可以和 剪切/粘贴寄存器的字母相,因为它们是保存在内存中的不同位置. 然后, 敲”<寄存器>
~ :修改光标下字符的大小写,并移动到下一个字符.这不是一个操作符 (除非设置了 ’tildeop’),所以你不能连接一个动作命令.这个命 令在可视模式下也有效,它会改变被选中的所有文本的大小写.
I :移到当前行的第一个非空字符并启动插入模式
A :移动到行尾并启动插入模式
o :在当前行的下面另起一行
O :在当前行的上面另起一行
dw :删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dd :删除一行
cw :修改一个单词
dtx :从光标所在处开始,删除到”x”.
d/text :删除从文本中出现”text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
cc :改变整行
C$ :改变到行尾
shift + < 左移一行
shift + > 右移一行
<%或>% :来将{,(或[等符号括起来的文本都左移或右移;这时候,你必须把光标放在这些符号({,(或[)上面.
u :undo
CTRL+R :re-do
J :合并一行
CTRL+p :自动完成功能(在输入模式使用)
CTRL+g :查看当前文件全路径
:n1,n2 co n3 :将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.
:n1,n2 m m3 :将 n1 行到 n2 行之间的内容移至第 n3 行下.
:n1,n2 d :将 n1 行到 n2 行之间的内容删除.
:n1,n2 w filename :将 n1 行到 n2 行之间的内容保存到文件 filename 中
使用剪贴板
“*y :将内容复制到剪贴板
“*p :将剪贴板的内容粘贴出来
存盘:
:q! :不存盘退出
:e! :放弃修改文件内容,重新载入该文件编辑
:wq :存盘退出
:w :存盘
:browse o :用浏览器打开文件
:browse w :用浏览器保存文件
:wqa :保存并关闭所有文件
:qa :关闭所有文件
:browse wa :用浏览器保存所有文件
u: 撤销前一次的操作
ZZ:保存当前文档并退出VIM
帮助
:help :查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回.
:help subject :看某一主题的帮助,ZZ 退出帮助
:help {主题} :例如,要获得 “x” 命令的帮助,输入如下命令:
:help x
:help CTRL-A
查找
fx :移动到一个指定的字符,单字符查找命令是最有用的移动命令之一.”fx” 命令向前查找本行中的字符 x.提示:”f” 表示 “Find”.
/pattern :正方向搜索一个字符模式
?pattern :反方向搜索一个字符模式
然后按n 继续向下找
精确查找整个单词 :如果你输入 “/the”,你也可能找到 “there”.要找到以 “the” 结尾的单词,可以用:
/the>
“>” 是一个特殊的记号,表示只匹配单词末尾.类似地,”\<” 只匹配单词的开头. 这样,要匹配一个完整的单词 “the”,只需:
/\
1 对VIM的基本介绍
一句话介绍就是:
VIM
是一个超级超级强大的文本编辑器.
它和Emacs
是一个数量级;
而我认为,比UltraEdit
、Editpad
、EmEditor
要高一个(至少半个数量级).
如果你有兴趣,不妨一读《程序员的编辑器——VIM》
,
以便于对VIM
有更详尽全面的理论认识.
要点1:VIM
及前身VI
,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展,值得信赖.
要点2:VIM
有模式.
通俗地做一下对比.
notepad无模式(或称为只有一种编辑模式),你按下j
,就是在正文中输入j
;
要保存,就要ctrl+s
;
要下移一行,就要↓
或鼠标.
而在VIM中,打开一个文件后,并不处在编辑模式,而是Normal模式
,
此时你按j
,VIM并不认为你要在正文中输入j
,而是代表光标下移一行
.
此时按i
表示进入insert
模式,即编辑模式
,即notepad
的模式.
编辑模式按Esc
退回normal模式
.
normal模式
下按:
进入命令行模式,用于输入较复杂的命令.
比如:w
代表保存文件
,
:e a.txt
代表打开文件a.txt
.
即VIM可以不用鼠标、方向键、菜单、Ctrl、alt……发出命令.
因此,以下的体验中切记进入正确的模式:
Esc到Normal
;
Normal下i到编辑
;
Normal下:到命令行
.
再说明一点是:文中:打头的是命令行模式,此外多数Normal模式.
要点3:复杂对抗复杂.VIM有的命令行很吓人,长长一串字符恍若天书.这些貌似复杂,实际上无非是一些简单命令的组合而已.借助于此,VIM用户可以实现非常复杂的需求.如果你没有这样的需求,就无须理会它们.
要点4:一能百能.这一点是Unix或命令行风格软件的显著长处,经过实用可以深刻体会.本文尽管有一些例子,但它运用之妙,存乎一心的感觉,仍未能充分展示.这里先打个比方,如果windows下某软件号称能炒菜,那意味着你点一下菜单,菜就做好了——这就是易用哲学.到底怎么做,你是没有多少发言权的,而是由软件开发者固化.而如果VIM说能,那它就是有一个“炒菜”命令,你可以把这个命令与原有的“原料”“数量”“火候”“风味”“灶具”命令结合在一起用,甚至在它前面加上“买菜”“洗菜”,后面加上“装盘”“洗碗”做成一个自动脚本,在合适的情况下自动执行.
要点5:无限灵活,个性由我.你只要有具体需求,VIM几乎都能满足.因此不同人的VIM是不一样的,即,把下载来的VIM配置成自己的VIM.
就此打住,开始体验之旅吧!
2 下载和安装
VIM是跨平台的.在Windows下,我们用的是gVIM for windows版.最新的是7.0版,下载包约8MB,完全安装后约20MB.
注:体积太大?你如果是高手,完全可以把不用的文件删除(包括帮助文件,它是我见过的软件中最好的帮助),精简后的体积可以不到2MB.或反之,仅下载一个gVIM.exe(1.5MB)就能运行.但对于这次体验,鉴于第一次使用,建议全部按默认项安装,这样才能达到文中预想的结果.
PCOnline下载,官方下载
安装,基本上,一直Agree、Next就行了.我通常是装在d:\program files\VIM下.
可参见
3 体验之旅
3.1 初见界面
安装完成后,按提示打开readme,你将看到
或自行打开桌面的快捷方式,也可直接运行d:\program files\VIM\VIM70\gVIM.exe,你应该看到如此界面:
什么?难看?土?我第一次见到它也是这种感觉,现在却只觉得亲切.
再一点,你有没有奇怪它是中文界面?难道我给你下载的是汉化版?会不会捆绑流氓插件啊?你如果真这样想,我只能叹息无语了.
3.2 试读html
请把此网页保存为htm,比如test.htm,然后用VIM打开它.暂时用菜单吧!结果可能是这样:
平平无奇,是吧?因为它是一个标准的VIM,并且是性能优先,视效忽略的VIM.无妨,请进入命令行模式(就是按一下冒号,注意是英文冒号:),注意到最下面一行的变化了吧.再输入sy on再回车.是不是有颜色了?它应该看起来象这个样子
重要提醒:为简化起见,下文将用
:sy on
表示(先确认在Normal模式,如不确认,请按几次Esc)你先按:进入命令行模式,再输入sy on,再回车.
补充说明:sy表示语法加亮,on当然是打开.:sy clear表示取消加亮.
3.3 改头换面
体验VIM就要按VIM的思路,所以我们要把gVIM改回VIM的本来面目.
对了,如果你认为它的界面很土,请更要多看一眼当前的样子,因为下面的操作后可能会更土!
执行如下命令
:set go=
这时的VIM应该是
不要大惊小怪,不就是菜单和工具栏不见了嘛?VIM中是不应该用到它们的.
补充说明:set表示一般性设置;go是gui option的缩写,就是界面;等于空就是什么都没有
再输入半条命令(先不要回车)
:colo ev
然后,按一下tab键.是不是自动补全为evening了?VIM是非常聪明的(但是不会象MS Word那样自做聪明).
然后你回车,看到了什么?
天色全黑了?没错,现在是evening嘛.
补充说明:colo就是设置调色方案.VIM自带了近十种调色方案,当然你还可以在网上下载更多,或改编自己的调色方案.你可以直接在:colo (加一个空格)就连续tab,选择不同的配色方案来体验一下.当然,evening是比较经典的一种.我一直就用它.
3.4 准备并打开范例文件
简化起见,请下载test.txt并保存为d:\test.txt.然后,在VIM中输入半条命令
:tabnew d:\t
输到这里后不要回车,按一下tab,VIM会自动补全为test.txt的.如果不对,再按几次tab,直到正确为止.然后回车.
你会看到VIM打开了test.txt,并且是以多页签(tab page)的方式.你可以点击各页签在打开的文件中间切换(高手有更方便的键盘命令做法).在VIM6.3中,还没有此功能.当然了,这并不意味着VIM的用户没办法享受多页签的便利,下载一个插件后——VIM有上千个插件——就可以了.面对多页签风格的流行(IE6→Maxthon→IE7),VIM7.0也新增了此功能.
我喜欢这种简单的页签.如果你认为此页签太难看,可试一下:set go=e
这时应如下效果
3.5 统一格式,下载vimrc
上面所操作的各种命令,都是对VIM的设置.把它们写到一个_vimrc文件中就成了默认选项.每个VIM用户的_vimrc文件都不一样,因为每个人的需求不同.
为了保证下面的操作得到预期的效果,请下载我的_vimrc.依次执行下述操作:
① 关闭所有的VIM
② 找到你的d:\program files\vim\vim7_vimrc,复制一份.
② 右键点击此处,“另存为”覆盖你的d:\program files\vim\vim7_vimrc.
注:这并不是标准做法,但对windows用户是比较方便的做法.
3.6 打开test.txt
再次就模式进行提醒:Esc到Normal;Normal下i到编辑;Normal下:到命令行.
运行VIM,并在命令行执行
:e d:\test.txt
接下来,我们把此文章排一下版.如果你认为可以手工排版,请把此文件复制到10000行再发表意见.
3.7 分段并保存
原文没有分段,观察一下,发现可以在“以下是……”前面加回车,于是
:%s/以下是/\r&/gc
输入后,界面如下
并提示,请回答y或a.如果回答y,则替换当前一个;到了下一个,VIM还会再问你.所以,你回答几个y后不妨一a了之,全部替换.
补充说明:s表示替换;s/a/b 表示把a换为b;上一命令是把“以下是”换为“\r&”,\r表示回车,&表示被替换的部分,即“以下是”;%则表示全文;/gc表示一直替换(不是仅替换第一个),并且要用户确认.
看一下文件,你或许想,空2行可能更好.很简单,再重复一下刚才的命令就好了.不过,对强大的VIM来说,无须笨笨地重复输入上次的命令.在命令行按下:后,再按一下↑(向上的方向键),看到刚才的命令了吧?直接回车,提问时输入a,任务完成.
既有变化,请及时保存.命令是
:w
当然,你也可以按ctrl+s.但ctrl+s之所以有效,是因为我在_vimrc中做了定义:当按下ctrl+s时,系统执行:w动作.因此,你完全可以定义其他热键,并把它映射到:w.
3.8 继续编辑
首先删除“坚持”两字,很简单,只要按gg2x就行了.为了看效果,你可以分开按:
gg,这时光标移到文章头.
2x,这时删掉了2个字符.
再一次体验VIM的神奇,比如按5x,于是5个字符消失了.当然,这5个字符是要保留的,没关系,你按一次u,就回来了吧?
再按一下Ctrl+r,是不是又没了?再来一次u,是不是又回来了?没错.u和Ctrl+r相当于(是相当于不是等同于)windows的undo和redo.
再试一下dd.是不是整行没有了?没关系,u回来就行了.
再试一下3dd.一下子删除了3行!没关系,u回来.
再来一个dG,哇,全文都没了?!仍然u回来啊.
3.9 更多编辑
任务a:把每一句分为一行,即达到如下效果
以**为荣、
以**为耻,
解决:如果你记得上面的替换命令,就会想到,可以用2次替换(“为荣、”换为“为荣、”加回车,“为耻,”换为“为耻,”加回车).但这两次替换在VIM中完全可以一次完成,即用正则表达式,在“为”及后面2字符(“荣、”或“耻,”)后加入回车.怎么表示呢?
:%s/为../&\r/gc
看一下高亮,没问题,直接a
哇,是不是很壮观啊?没觉得?如果是一千行一万行呢?
任务b:把行末的标点去掉,即“荣”后的顿号和“耻”后的逗号.
解决:办法太多了,仍可以用替换.但此处还是展示一个新功能:列操作.
安全起见,按两下Esc,再gg$,这时光标应到了文章第一行最后一个字符,即顿号上.
再按ctrl+v,注意一下状态栏是否提示有“可视 块” 字样.(请确认你是采用了xbeta的_vimrc文件,如果没有,请试一下ctrl+q)
再15jx,是否标点全部删除了?因为15j表示向下选中15行,x表示删除.
任务c:错落有致
操作:这次演示一下宏的用法,请严格按本教程操作.
先做一下确认:输入法没有打开,并Esc到normal状态,gg到文首.
按qa(q表示开始录制宏,宏的名字为a)
再shift+>>(表示按住shift,连按两下>,再放开shift.此时第一行应当向后tab了一下)
再j^(此时下移一行,并置光标于行首)
再shift+>>再shift+>>(即第二行向后tab两下)
再j^(下移一行,并将光标置于行首,为后续操作做准备)
再q(表示宏录制结束,VIM会提示记录完成)
这样宏录完了,可以用了.
再@a,看到了效果了吧?宏执行了一次,即3、4行成功了.还剩下6段,但是你不用按6次@a,而是只要按下6@a就行了!!!
太神奇了!回放一下?先u,再来一次6@a.既然可以6,当然可以千千万万!
补充说明:高手使用VIM是千变万化的.上面的前2个操作(分行+删标点),完全可以合成一个:%s/(为.)./\1\r/gc;或再把第3个操作(错落有致)融合到前一个操作中.
3.10 自由体验
体验光标移动:请随意按几下j和k,看看反应;再多按几下l和h,看看反应;然后,当你的光标在英文时,请按几下w和b.
对了,gVIM的每一种功能,都有无限可能,因此,你也可以在上面几个字母前加上数字,比如 9w 2h,看它的反应.
体验自动补全:i进来吧,到目前为止还没写过字呢!为简单起见,你直接把用鼠标放到中文的下一行,我们把 Eight Do’s and Eight Don’ts 输入一遍.但是,输入一个E,先别动!按ctrl+p是不是自动补全了?
体验大小写(每次操作后,都用u恢复原状),试一下g~~和guu和gUU和g??(g??后可以不按u,再按一次g??也能恢复原状)
神奇吗?这还是VIM功能的单个表演,真正的高手是把它们组合在一起,完成你自己独特的编辑需求.
3.11 体验语法高亮和折叠
此部分讲起来太复杂.如果你有其他编辑器如UltraEdit基础,会有助于你理解.但VIM在此方面的强大灵活,UltraEdit是难忘其项背的.
仍然是我们编辑的原文件,为简化计,请下载test2.txt;下载tx1.vim并保存在d:\program files\vim\vimfiles\syntax\tx1.vim
用VIM打开(比如要打开d:\test2.txt,请在VIM中:tabnew d:\test2.txt)它.平平无奇是吗?这是因为VIM并不知道这个文件要加亮.键入一个命令:setf tx1,这就相当于告诉VIM此文件的类型是tx1,所以就按照刚下载的tx1.vim进行高亮和折叠.
此时你会发现test2.txt完全折起来了.如何打开?你可用鼠标点最左边的+,当然,也可以用命令zr或zR打开(zR打开全部;zr打开当前;zM折叠全部;zm折叠当前).打开后,看到高亮效果了吧.可以对文字设定前景色、背景色、粗、斜、下划线风格.
3.12 加密文件
文本文件打开最快,编辑起来最容易,并且在VIM中查找非常方便.因此,我用它来记日记,并作为通讯录.但是安全问题怎么办呢?很简单,VIM本身即可加密(录然解密也要用VIM).在上述打开的文件中键入:X(是大写X),VIM就提示你设定密码,安全起见要确认第2次.然后,保存(键入:w).把VIM或此文件关闭,再打开时,就要输入密码了.只有你输入正确的密码,才能得到正确的文件.
4 我的应用
VIM和Total Commander一样,我把它们都设定为开机自动运行,其应用不可胜数.
比如说通讯录管理,我未用任何软件,就用VIM管理一个address.txt.它可以实现:快速启动(我在VIM中定义了书签,键入`A就会打开),加密(用VIM的:X),超强搜索(无须多说),分组折叠(fold),email和电话号的高亮显示(自定义语法文件)吧.
再比如,笔者会用VIM来辅助word, excel, bbs发文,安全删除文件,制作精简的五笔词库等.具体可参见 《我常用的VIM功能》,《活学善用gVIM,提高工作效率:实例篇(合集)》,《用gVIM打造个性化记事本》等文章.
如下两图分别是我的个性化txt示例,和用VIM写此篇文章时的情况:
5 后记
这篇文章比最初计划写得长很多,但仍感觉很多非常优秀的功能没有提到.比如,眼下我写这篇文章,当然用VIM.但是因为有插图,所以用了htm格式.在插入图片时,我只要输入img,VIM会自动换为“<img src=”“>”,并把光标放到两个引号中间,以便于我输入图片名称.我输入lnk后,VIM会替换为“<a href=”“></a>”.当我想看一下效果时,我只要:! g:\study\it\pconline\vim\xbeta-vim.htm 它就自动在浏览器中打开了.而这一个长长的路径,因为有了自动补全和命令行历史,也非常容易.而当一些url还未确定,需要标注时,我就用一个`1,VIM就会以醒目的红色块标出来,一目了然.而下次再打开此文件,它会记得我最后编辑的位置.
在用VIM之前,我曾试过几十种pad和editor,包括长期用Editpad,也曾经比较精通过UltraEdit,也曾经测过EmEditor, EditPlus等.但用了VIM之后,我不再关心windows世界的成千上万的编辑器.因为使用它们的逻辑是“如果有新需求,只能等软件升级或换一个软件”,而使用VIM的逻辑则是“如果有新需求,请做个性化配置或下载插件”.
VIM在手,夫复何求!
最后,向VIM所代表的追求卓越、开源共享的精神致敬!并希望有责任感的用户逐渐减少盗版!