http://blog.csdn.net/gentleliu/article/details/10200147
最近有同事在询问我vim相关操作,问我有没有好的资料,其实我这资料有不少,但又不是很适合那些想快速入门的童鞋,于是决定写一个vim相关操作的主题,以适合那些想快熟入手又不感觉到复杂的童鞋,我也可以记录一下以备以后查询,因为好多以前熟练的操作由于一段时间没用又忘了,又得各种百度谷歌等(来一段废话先),下面马上进入主题。
Vim的三种模式
在开始学习vim的时候,一定要对vim的三种模式有一个大概的了解:
Insert mode(插入模式):普通的编辑模式,在这种模式下,像普通编辑器一样进行编辑操作,刚启动vim的时候,是工作在normal mode下,要进行编辑的话,需要先切换到insert mode。
进入方法:
1.(insert):
i 从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。
I 从光标所在列的第一个非空白字元前面开始插入资料。
2.(append):
a 从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。
A 从光标所在列最后面的地方开始新增资料。
3. (open):
o 在光标所在列下新增一列并进入输入模式。
O 在光标所在列上方新增一列并进入输入模式。
退出方法:<Esc>或ctrl + c
Normal Mode(普通模式):在此模式下不能对文件做像普通编辑器那样的操作,但可以使用命令对该文件做光标的移动,文本的复制、粘贴、查找等操作,只要熟悉了这些命令,对文本的操作相当方便,这些命令的键盘按键都相当顺手,你不需要通过移动鼠标或点击按钮来实现这些操作,你的手可以一直保留在键盘上,这可以使得你的编程效率大大提高,具体的命令在后面会详细讲解。
Command mode(命令模式):Command mode需要以:开始,以<Enter>结束;例如:
:set nu<Enter>
:help tutor<Enter>
在command mode中可以对vim的属性进行设置,以便打造一个最适合你自己的编辑器属性,或者调用出帮助等。
注:本文给出的命令前面如果带有:表示在Command mode下的操作,否则表示在Normal mode下的操作。如:w为Command mode下文件保存命令,命令w不带冒号为Normal mode下光标移动命令。在Command mode下命令需要按下回车键才会生效,而Normal mode模式下不需要回车键。
Vim基本操作
在系统会提示下输入命令”vim +文件名”将打开指定文件,输入”vim”将打开vim程序并开启一个新文件。
:q结束编辑退出vim
:q!不保存已编辑过的文件并强制退出
:w 保存当前编辑文件
:w!强制保存
:wq保存当前文件并退出
:w file将文件另存名为file的新文件
:n,mw file 将文件第n行到第m行存入新文件file
(注:file存在时可以加!强制覆盖以前文件)
使用vim需要清楚vim三种模式分别做什么样的事情,怎么样进行相互切换;要切换到Normal Mode下则是用 <ESC>键,如果不晓得现在是处于什么模式, 可以多按几次 <ESC>,系统会发出哔哔声以确定进入Normal Mode。在不知道现在所处模式的时候,通常通过<Esc>退回到normal mode,再进行相关操作。看完本节之后你已经可以使用vim了,但要达到高效编辑还需要继续看以后章节,从下一章开始将介绍一些你刚开始会觉得奇怪但熟练以后会觉得高效的编辑方法。
很多时候你在编辑文件时移动光标都会花很长时间,这样就无法高效的编辑了,要想达到高效编辑最好能够将光标马上定位到你需要的位置,vim就是可以满足你这样需求的一款编辑器,本节就要讲一下vim快速移动定位的一些操作命令。
下面的操作都是在Normal Mode下的操作,所以操作之前先按一下<ESC>以确保你处在正确的模式下。
方向移动:
h 向左移动一列
j 向下移动一行
k 向上移动一行
l 向右移动一列
(你也可以使用方向键移动,但需要将手靠过去,当你在编程时一天重复几百次还是比较耗时的,并且有些键盘的方向键不是那么舒服。)
单词或字符串移动:
w 移动光标到下一个单词(符号)首个字符
e 移动光标到下一个单词(符号)尾部字符
ge 移动光标到上一个单词(符号)尾部字符
b 移动光标到上一个单词(符号)首个字符
fa 移动到下一个a单词处
(上述命令对应的大写W、E、gE、B可以对以空白字符分割的字符串作相应移动,并且上述命令可以加计数前缀,如2w移动光标到后两个单词(符号)的首个字符,所以很多命令你都可以猜测的出来)
行首尾移动:
0 移动光标到本行最开头,同<Home>键
^ 移动光标到本行最开头的字符处.
$ 移动光标到本行结尾处,同<End>键
多行移动:
H 移动光标到当前屏幕的首行.
M 移动光标到当前屏幕的中间一行.
L 移动光标到当前屏幕的尾行.
gg 移动光标到文档首行.
G 移动光标到文档尾行.
zz 移动光标到屏幕中间,并将光标所在行也一并移动
zt 移动光标到屏幕顶部,并将光标所在行也一并移动
zb 移动光标到屏幕底部,并将光标所在行也一并移动
滚屏移动:
CTRL-E 文字向上滚动一行
CTRL-Y 文字向下滚动一行
CTRL-F 向下翻屏,同<Page Up>
CTRL-B 向上翻屏,同<Page Down>
CTRL-U 文字向上滚动半屏
CTRL-D 文字向下滚动半屏
函数体跳转:
[[ 用来跳到光标前面的一个函数开始处。
][ 用来跳到光标后面的一个函数结尾处。
]] 用来跳到光标后面的一个函数开始处。
[] 用来跳到光标前面的一个函数结尾处。
http://blog.csdn.net/gentleliu/article/details/10242431复制、删除与粘贴:
x 删除当前光标所在字符
X 删除当前光标所在前一个字符
yy 拷贝光标所在行.
dd 删除光标所在行.
D 删除从当前光标到所在行尾的内容.
在vim中,很多命令可以和联合使用,上面删除命令可以联合移动命令,还可以加计数前缀,这样可以组合出很多命令,只要你熟悉了这些,很多命令都可以猜得出来,比如:
4x 删除当前光标开始后面4个字符
dw 删除当前单词光标所在位置到结尾处
d2w 删除两个单词
daw 删除当前单词
d$ 删除从当前光标到所在行尾的内容(同D).
w 拷贝从当前光标到光标所在单词结尾的内容.
y0 拷贝从当前光标到光标所在行首的内容.
d0 删除从当前光标到光标所在行首的内容.
y$ 拷贝从当前光标到光标所在行尾的内容.
d$ 删除从当前光标到光标所在行尾的内容.
yfa 拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa 删除从当前光标到光标后面的第一个a字符之间的内容.
:12,24y 拷贝第12行到第24行之间的内容.
:12,y 拷贝第12行到光标所在行之间的内容.
:,24y 拷贝光标所在行到第24行之间的内容.删除类似.
有没有发现很多命令你都可以猜出来,是不是很灵活啊,有木有!!
替换:
Vim的替换相当高效
:%s/aa/bb/g 在全文中将出现aa的地方替换为bb
(%表示范围为所有行,g表示替换所有匹配点。)下面可以扩展一下这个命令:
:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa替换为 bb
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa替换为 bb
如果你想替换单词,而不是出现指定字符串就替换,可以使用命令:
:%s/\<aa\>/bb/g 在全文中将单词aa替换为单词bb
该命令可同行上进行扩展。
:/aa 全文中查找字符串aa