VIM编辑器概述
vim可以说是,在学习linux和工作中用的最频繁的文本编辑工具了,当然,在VIM的帮助手册里,并不认为这只是一个文本编辑器.
而是 一个程序员的文本编辑器~
vim兼容vi的功能,但是也有不同的地方.他优化了vi很多地方.
他可以用来编辑ASCII文件,特别是用来编写程序.vim会根据文档的扩展名或者文件开头信息,来判断文件的内容,从而实现语法高亮等功能.
当然vim的用法有很多,其中需要注意的一点是,如果我们使用vi/vim编辑的文件不存在,那么vi/vim就会在缓冲区建立一块区域用来存储数据.
VIM的三种模式
在正式使用vim之前,有必要先了解一下VIM的三种模式.
当我们使用vi/vim命令编辑文件的时候,刚开始进入文件时的状态就是一般模式.
如图所示,如果我们打开的是一个已存在的文件的话,那么在最下面一行则会显示该文件的部分信息.
如果我们打开的是一个不存在的文件,那么最后一行将会显示(下图的newfile是我建立文件的名称):
当我们从其他两种模式进入一般模式的时候,则会显示如下图:
这里有一点需要说明,因为我的linux设置了中文,所以此处显示的数据才是中文的.
在一般模式中,我们可以通过一些输入来对数据进行增删改查操作,具体的操作将在下文解析.
在我们进入一般模式之后,如果我们需要编辑文件,就可以通过输入[i,I,o,O,a,A,r,R]中的任何一个字符进入编辑模式.
当我们进入编辑的时候,在屏幕的最下方则会显示:
或者
这时候,我们就可以进行文本编辑操作了,在文本编辑操作的时候,我们可以通过[ESC]按键返回一般模式.
如果我们在一般模式的时候键入[/]或者[?]或者[:]三个按键之一,那么就会进入指令模式.
在指令模式我们可以执行一些功能性和复杂的操作.
关于vi编辑器的三种模式,可以看下图.
通过刚才学的知识,我们可以总结一下.
一般模式:
当我们使用vi命令打开文件的时候,默认的就是一般模式。
在这个模式里面,我们可以执行对数据的删除,复制,粘贴的操作
编辑模式:
在这个模式我们可以输入内容
指令模式:
在这个模式可以执行查找,读取,保存,替换等操作
也就是说,
一般模式对应着增删改查基本操作。
编辑模式对应着具体文本操作。
指令模式对应着功能性及复杂操作。
VIM的基本操作
通过上图我们可以看到,vim可以对标签,内容,错误以不同的颜色来显示(我的样式可能有点花哨...或许不仔细看看不清表示空数据的那个符号).
而且,在窗口最下方会保留一行来作为信息显示的地方,类似于windows的状态栏.
因此,我们可以将窗口分为两个部分,一个是上面的区域,另一个就是最下面一行这个位置.
上面的区域用来显示文本数据,而下面这一行则会根据我们的操作来显示提示.
在下文中,我们将把第一部分作为数据展示区域,而第二部分则成为状态栏.
ok,接下来就开始学习vim的三种模式下的操作.
一般模式
在开始的时候,我们简单的提到了一般模式的操作,接下来就比较详细的说一下一般模式的具体操作.
首先了解一下光标移动的操作.
一般模式下,简单操作光标
h或者左箭头 |
光标向左移动一个字符 |
j 或者下箭头 |
光标向下移动一个字符 |
k 或者上箭头 |
光标向上移动一个字符 |
l 或者右箭头 |
光标向右移动一个字符 |
个人觉得这个实际上不用专门去记,正常情况下,我们的操作也是使用方向键来进行这样的操作,至于hjkl几个按键,相信用的机会会很少,
翻页操作
[ctrl]+[f]或者[page down] |
下一页 |
[ctrl]+[b]或者[page up] |
上一页 |
[ctrl]+[d] |
下半页 |
[ctrl]+[u] |
上半页 |
哎呀...这个操作分类还真不好分类...有些操作不知道该如何形容....
+ |
移动到非空格的下一列 |
- |
移动到非空格的上一列 |
0(数字)或者home |
移动到行首 |
$或者end |
移动到行尾 |
H |
移动到当前页首行首字符 |
M |
移动到当前页中间行的首字符 |
L |
移动到当前页尾行首字符 |
G |
移动到当前文档最后一行 |
[数值]G |
移动到当前文档第[数值]行 |
gg
|
移动到当前文档首行 |
[数值][回车] 往下移动[数值]行 |
上面这些都是移动光标(游标)的基本操作,在一般模式下还有一些功能性的操作.
功能性操作
粘贴
p/P |
p用于将已复制的数据粘贴在光标的下一行.
P用于将已复制的数据粘贴在光标的上一行. |
复制
yy |
复制游标所在的哪一行 |
y1G |
复制光标所在行到第一列的数据 |
yG |
复制光标所在行到最后一列的数据 |
y0 |
复制光标所在字符到行首字符的数据 |
y$ |
复制光标所在字符到行尾字符的数据 |
补充 |
其实感觉这种组合比较好理解.首先我们知道yy是用于复制当前行的命令,1G表示当前文档第一行,所以就是复制当前行到第一行的数据,其余的根据光标操作里面的解释,也能够比较容易的理解,感觉理解着记忆会更有效.
另外,我好像少写了一个操作:
[n]yy,复制光标坐在行往下[n]行. |
删除
x/X |
x表示删除后面一个字符
X表示删除前面一个字符 |
[n]x |
删除后面n个字符 |
dd |
删除当前行 |
[n]dd |
删除光标往下[n]行 |
d1G |
删除当前行到第一行的数据 |
dG |
删除当前行到最后一行的数据 |
d$ |
删除当前位置到行尾的字符 |
d0 |
删除当前位置到行首的字符 |
其他功能性操作
J(大写) |
将当前行和下一行合并为一行 |
c |
重复删除多个数据,比如5cj表示删除5行数据 |
u |
还原前一个动作,类似于windows的[CTRL]+[Z] |
最后补充一个比较好玩的操作
. 看清楚了哈,前面有个小点[ . ],这个[ . ]表示可以前一个动作. |
查找
/[word]
?[word] |
在文档中查找[word]字符串
在文档中网签查找[word]字符串 |
n
N |
继续执行上一个查找操作
反向执行上一个查找操作 |
替换
:起始行 , 结束行s /被替换单词/替换为/g |
将起始行中所有需要被替换的单词替换指定的单词. |
如果在/g的后面加上c的话 |
在替换字符前将会询问用户 |
啧啧....这么多指令,难不难过...绝不绝望...
但是这些命令总结一下的话,还是很好记的...
首先是
上下左右移动光标,
pagedown,pageup翻页.
p粘贴,
y复制,
x和d删除.
u还原.
/单词和?单词查找
:开始,结束s/字符串1/字符串2/g替换 如果末尾加c则替换前询问.
ok,就这么简单,至于还有一些其他的..记住0$gG的用法,拼一下就好了.
切换到编辑模式
在我们最开始三模式的图中,上面描述了如何从一般模式切换到编辑模式.
这里在具体一点.
我们通过在一般模式输入按键进入编辑模式.
i |
在当前光标位置插入 |
I |
在光标所在行的第一个非空字符处插入 |
a |
在当前光标的下一个字符处插入 |
A |
在当前行最后一个字符后插入 |
o |
在当前行的下一行插入新的一行 |
O |
在当前行的前一行插入新的一行 |
r |
取代光标所在字符一次 |
R |
一直替换光标所在位置的字符 |
我感觉这几条命令都挺好玩的.敲代码的时候肯定会经常用到.
当然之前说过从编辑模式和指令模式可以通过[ESC]来切换到普通模式.
切换到指令模式
可以在一般模式下通过键入下列指令来进入指令模式.
指令
:w |
保存编辑的数据 |
:w! |
强制保存 |
:q |
退出 |
:q! |
强制退出 |
:wq |
保存并退出 |
ZZ |
有修改则保存退出,无修改则不保存并退出. |
:w [文件] |
另存为 |
:r |
在当前数据中,添加另一个档案的数据,这些数据将会追加在当前字符后面. |
:n1,n2 w[文件] |
将指定行之间的内容另存为 |
:! 命令 |
暂时离开vi,然后执行命令 |
:set nu |
显示行号 |
:set nonu |
不显示行号 |
这几个命令感觉就很好记了.
同样,也是通过ESC返回到一般模式.