vim乃Linux下相当牛掰一文本处理神器也,是vi编辑器的升级版,全称叫Vi IMproved. 而vi则是Visual Interface的缩写,他们处理都是ASCII码字符数据,熟练使用vim绝对是你成为Linux大牛不可或缺的本领,所谓千里之行,始于足下。
我这里写的比较啰嗦,但都是非常常用的用法,如果觉得看着太费劲不够直观,可以看另一篇博文 VIM命令大全, 这里有更多的常用的实用的用法;当然如果你不想上网查,vim自带的帮助文档也有的查,直接输入vim然后回车,会进入vim编辑器,此时输入:help就可以进入帮助文档,输入 :help command 还可以查处子命令的用法, 例如我想查看 d这个命令的作用和用法,直接:help d就可以啦,授人以鱼不如以渔嘛。。
下面就本人学习过程中一些非常常用到的比较实用的用法做一下总结,
首先vim有三种模式: 编辑模式,输入模式,末行模式
编辑模式: 也叫命令模式,用vim打开文件后默认进入的就是此模式,在此模式下,可以组合使用vim的一些命令,完成对文件的快捷操作,
字符移动操作:
h, j, k, l 四个键分别对应 左,下, 上, 右 操作, 这个左右比较好理解,h在左边,l在右边,j, k在中间表上下,但是我们正常惯用右手的人就有点不好理解,反正我是这样感觉的,正常按我的思维左边的表示上,右边就下了,比较顺手,所以我推测开发vi的人估计是个左撇赖子,很多有成就的牛逼的人都是左撇赖子,爱因斯坦。。。所以没事开发一下右脑也是有好处滴,, 关于这个马哥也有个助记的方法,就是j代表japan小日本鬼子,k代表korea棒子,在地图上棒子在鬼子的上面,所以k是向上的箭头,j是向下的箭头,当然了不管是什么方法只要能帮助记忆就中,黑猫白猫嘛
单词移动操作:
w word 向后移动一个单词,光标定位在词首
e end of a word 向后移动一个单词,光标定位在词尾
b backword 意思是向前移动一个单词
句子跳转:
) 跳到下一句
( 跳到上一句
段落间跳转
} 下一段
{ 上一段
句子间跳转和段落跳转不太常用,配置文件等的句子段落划分可能跟我们想的会有不同啦。
行间跳转
1G / gg 跳转至第一行
G 跳转至最后一行
#G #为正整数,跳转至第#行
行内跳转
^ (shift + 6) 跳至行首(行首第一个非空字符),这个托字符在Linux中也是个神一样的存在,你会经常和打打交道
0 对,就是数字0,光标跳至绝对行首(真正的行首)
$ 这个美元可以跳到行尾,和^一样也是一个神一样的存在,各个地方你都会看到她的倩影
跳转进阶用法:
上面的这些个移动都是一个一个的移动的,如果要移动的位数比较多,恰好又不在行首或行尾,一个一个点,岂不是很麻烦?莫怕,作者早为你想到了,比如我想一下向上移动6个字符,按下6h,效果刷刷的,想一下向后跳8个词?按下8w,你懂的,那好吧不哆嗦,以此类推…… 3e, 4b, 5j, 7k, 9) …… 自己好好玩去吧,记住他并在使用的时候经常的想起他并经常的使用他,一般人我可不告诉他。当你基本脱离上下左右箭头的时候,你基本也就离大牛不远啦。
输入模式:
要从命令模式进入输入模式,方法有很多,根据需要来使用,注意看我后面标出的字母缩写
- i insert 在当前光标之前插入
- a append 在当前光标之后插入
- I 大写在行首插入
- A 大写在行尾插入
- o 在当前光标所在行的下面一行插入
- I 在当前光标所在行的上面一行插入
在任何模式下按下ESC键可以退出当前模式,回到命令模式,已经是命令模式的则还在命令模式。
编辑是可以了,复制呢,答案是肯定的,首先确定回到命令模式,
按下yy y是yanK的缩写,整行内容就被复制到剪切板中了,然后把光标移动到你想的位置按下p刚把刚才复制的那行粘贴到你光标所在行的下面一行,P大写则粘贴至上面一行,p是paste的缩写是也; 剪切的话dd是也,当前行的内容删除而后会放在剪切板中,粘贴方法相同。
再有一个比较高端的用法可以在命令模式下按下v(按字符选取)或者V(按行选取), 此时会进入可视化模式,移动你的光标哈哈,就像在windows下拖动你的鼠标一样,然后复制剪切随便你啦。。
还有个值得提一下的用法,就是如果想翻屏的话,可以用
- ctrl + f (forward) 向后翻一屏,
- ctrl + b (backword) 向前翻一屏,
- ctrl + d (down) 向后翻半屏
- ctrl + u (down) 向前翻半屏
实用命令 d delete 删除命令,可以和其他命令组合删除词,字符,行,等
例如dh向左删除当前字符,dl向右删除当前字符,dj删除当前行和下面一行,dk删除当前行下上面一行,dw删除向后一个单词,de, db …
当然你还可以用 d1h, d2l, d#w, d#b(#用你需要的正整数代替) … ,如果需要重复之前的操作,只需按下” . “即可,需要重复多次就按下多次 “. “
和d稍微不同的还有一个命令c,这个命令是哪个单词缩写,我也不知道,用法和d用法类似,不同的是删除之后直接会进入insert编辑模式, 相当于d执行后又按下i
常用命令大概这么多了,还有个比较实用的用法:窗口的拆分: 当你编辑一个文档而又需要参照此文档其他章节的内容又不想再打开一个文档的时候就派上用场了, 这个功能类似于word里的窗口拆分,在word2007中,点 “视图” 菜单 –> “拆分“即可。在编辑文档的时候还是非常有用的。
在vim下,按下ctrl + w 然后按s, (split 缩写)则可以实现水平拆分,按下 v (vertical 缩写)则可实现垂直拆分,具体效果说是说不清楚的,自己体验一下吧。 需要两个窗口切换则先按下ctrl + w 然后按相应的上下左右→即可。需要退出的话:q 退出当前,:qall退出所有 :!qall 强制退出所有(这是末行模式命令下面会提到)
还有一个打开文档的技巧,vim + /path/to/file (相对或绝对路径定位到你要打开的文件) 直接打开到最后一行, vim +# /path/to/file 打开在第#行,
又想起来一个命令的撤消: 保证你在命令模式下,按一下u则可以撤消一步操作,按多次撤消多步操作,vim默认可以保存50次,这个值可以通过编辑/etc/vimrc 中 set history=50那一行的值改变,如果手贱撤消多了也8怕,按ctrl + r (restore) 可以恢复你的撤消, 按大写的U可以撤消所有操作。
末行模式:
末行模式下的功能更加强劲,在命令模式下按下冒号:可以进入末行模式,:w 保存编辑内容,write , :q 退出quit :wq 保存并退出 前面加!表示强制 :!q强制退出,:x = :wq ,
搜索功能: :/text (text为你要查找的字符串) 向后查找, :?text 向前查找, 查找到的内容会高亮显示, 按n(next)会和你查找的方向相同找下一个,按大写N则向相反方向查找下一个
窗口属性定义:
- :set ai | autoindent 开启自动缩进(写脚本时就老开心啦,写出来那叫一个漂亮)
- :set nu (number) 显示行号
- : set nonu (no number) 取消显示行号
- : set ic | ignorecase 忽略大小写
- :set hlsearch (highlight search) 搜索高亮显示
- :set sm| showmatch 不要想歪了,显示匹配的括号
所有的设置前面加个no就可以取消显示了,当然你的设置只对当前编辑的文档生效,如果想永久生效可以写入/etc/vimrc配置文件 或~/.vimrc文件,~代表家目录
好了,下面上一盘压轴大菜:查找和替换,这个东西以后编辑配置文件老有用啦,我来举个例子,有图有真相:
LOOK 1:
原文如下,现在我要把所有的zhishen 后面都加上一个must,
输入如下命令
- :%s/\(shen\)/\1 must/g
解释一下这行命令,: 进入末行模式,% 代表全局查找,s (search)查找命令,红色标出的一对括号,\ 表示转义,即使用括号原来的意思,因为括号在Linux下有其特有的功能的,后面的\1代表引用前面括号内的内容,g (global)表示全局,当然后面还可以加i (ignore case)忽略大小写,如果有需要的话,/ 是每个字段之间的分隔符,为了方便区分,某些情况下你可以替换成# 或 @ 都可以。
当然像这种简单的正则表达式,只有一个引用内容的括号可以省略不写,引用也可以直接用一个简单的&来解决,于是上面的命令也可以这样写:
:%s/shen/& must/g 效果是一样的 或者 :%s#shen#& must#g
LOOK 2:
这里我以apache的配置文件httpd.conf为例,比如从102行到109行的配置我不想启用了现在,我就可以在每一行前面加个#注释掉即可,
:.,109s/^/#/g 这里我把光标移动到102行,前面的.代表当前行,整个表示从当前行到第109行所有开头都用#替换,也可以这样写 :102,109s/^/#/g 或者 :.,+7s/^/#/g 再或者 :102,+7s/^/#/g 都是一样的效果。
LOOK 3:
这个情景我想把102行到109行移动到93行的下面
:102,109d 回车,代表删除102到109行,但是这里的删除是先放到剪切板中的,所以下面的你懂啦,把光标移动94行,按下一个大写的P,哈哈就全部粘贴过来啦。
就写这么多了吧,这些都是可能经常能用到的功能。vim的功能非常之强大,首先把为些常用的基础的学会吧,再稍微高级一点的常用功能可以看一下我的另一篇博文《VIM命令大全》,自己结合说明慢慢摸索,基本这些差不多够平常工作用了。