前言
【vi 与vim】
vi(Visual Interface)是所有Unix与Linux系统下的编辑器,Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。
(科普一下~~)Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。(以上科普来自维基百科)`
vim是一个分工明确的编辑器,它分为三种模式,三种模式有着不同的功能,可以满足于你不同的需求。
打开一个文件:vim filename
如果该文件已经存在,则直接打开并编辑:若该文件不存在,则创建这个文件并打开它。
选项 | 注释 |
---|---|
-m | 只读方式打开文件 |
-b | 二进制打开文件 |
-d file1 file | 比较两个文件 |
-d 的效果如下:
[root@localhost app]# vim -d issue profile
【vim的三种模式】
❉❉命令模式
一般使用vim打开文件以后自动进入命令模式,在该模式下可以使用光标或键盘h、j、k、l 来移动光标,可以复制,粘贴、删除数据来处理文件内容。
❉❉编辑模式
也称插入模式。
在命令模式下按【a、i、o】进入编辑模式,在屏幕左下方或出现【– INSERT – 】字样则表示你已经进入了该模式。在该模式下,可以插入文本文档,如需回到命令模式,按下【Esc】键。
❉❉扩展模式
扩展模式下可以对文件内容进行查找,删除,替换以及保存/退出文档。注意~在编辑模式下是无法进入扩展模式的,需要从编辑模式先返回到命令模式,在命令模式下按【/ : ?】均可以进入扩展模式,而从扩展模式回到命令模式,也只需按下【Esc】键。
首先介绍关于命令模式的一些小选项:
接下来介绍命令模式转入到插入模式下,一些讨巧的键~~
命令模式→ | →插入模式 |
---|---|
i(insert) | 在光标所在处输入 |
I | 在当前光标所在行的行首输入 |
a(append) | 在光标所在处后面输入 |
A | 在当前光标所在行的行尾输入 |
o | 在当前光标所在行的下方打开一个新行 |
O | 在当前光标所在行的上方打开一个新行 |
在命令模式下有一些选项操作,下面来简单介绍一下:
字符间跳转:h: 左 l: 右 j: 下 k: 上
单词间跳转:
选项 | 注释 |
---|---|
w | 下一个单词的词首 |
e | 当前或下一单词的词尾 |
b | 当前或前一个单词的词首 |
当前页跳转:
H:页首 M:页中间行 L:页底
行首尾跳转:
选项 | 注释 |
---|---|
^ | 跳转至行首的第一个非空白字符 |
0 | 跳转至行首 |
$ | 跳转至行尾 |
行间跳转:
选项 | 注释 |
---|---|
G、扩展模式 | :跳转至由#指定行 |
G | 最后一行 |
1G/gg | 第一行 |
翻屏操作:
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
字符编辑:
选项 | 注释 |
---|---|
x | 删除光标处的字符 |
x | 删除光标处起始的#个字符 |
xp | 交换光标所在处的字符及其后面字符的位置 |
~ | 转换大小写 |
J | 删除当前行后的换行符 |
删除命令:
选项 | 注释 |
---|---|
d | 删除命令,可结合光标跳转字符,实现范围删除(v可以实现选中范围删除) |
d$ | 删除到行尾 |
d^ | 删除到非空行首 |
d0 | 删除到行首 |
dw | 从光标所在处删除到单词尾 |
de | 从光标所在处删除到单词尾 |
db | 从光标所在处删除到单词首 |
复制命令
y: 复制,行为相似于d命令
其余选项与删除命令选项相同,在这里不做一一介绍啦。
粘贴命令
p(大写):缓冲区存的如果为整行,则粘贴当前光标所在行的下
方;否则,则粘贴至当前光标所在处的后面
P(小写):缓冲区存的如果为整行,则粘贴当前光标所在行的上
方;否则,则粘贴至当前光标所在处的前面
撤销命令
在有时候我们在vim模式下编辑一个文件,不小心误操作了一步,这时候不要慌不要忙,撤销命令来帮你忙~
选项 | 注释 |
---|---|
u | 撤销最近的更改 |
u | 撤销之前多次更改 |
U | 撤消光标落在这行后所有此行的更改 |
. | 重复前一个操作 |
n. | 重复前一个操作n次 |
e! | 在修改文件后,没有退出的状态下回到进入文件的原始状态 |
此外,命令模式下还有一种方法可以切到编辑模式下,它就是“c”命令。
“c”命令的工作原理是在命令模式下使用“c”命令执行一个修改操作以后在切入编辑模式,和 之前说的“a、i ”都不同哟~~(在某些功能上来说,有点相相似于d命令)
切换命令 | 注释 |
---|---|
c$ | 将光标所在处及其到行尾的内容删除后切换到编辑模式 |
c^(c0) | 将光标所在处及其到行首的内容删除后切换到编辑模式 |
cb | 删到单词首后切换到编辑模式 |
ce (cw) | 删到单词尾后切换到编辑模式 |
cc | 删除#行并输入新内容 |
C | 同 c$ 的用法 |
扩展模式相关用法
①地址界定
在命令模式下使用“:”进入扩展模式。在扩展模式下,我们可以通过界定一个地址范围来匹配你所需要的相关字符。
命令 | 注释 |
---|---|
# | 具体第#行,例如4表示第4行; |
#,# | 从左侧#表示起始行,到右侧#表示结尾行eg 2,3 则表示2到3行 |
$ | 表示最后一行 |
% | 表示全局,全文 |
i | 忽略大小写 |
②查找替换
查找替换命令可以与地址定界一起使用,组合起来查找你想查找的字符串或者替换它。
命令 | 注释 |
---|---|
/字符串 | 从当前光标所在处向文件尾部查找 |
?字符串 | 从当前光标所在处向文件首部查找 |
n | 与命令同方向 |
N | 与命令反方向 |
i | 忽略大小写 |
s | 在扩展模式下完成查找替换操作 |
g | 全局替换;默认情况下,每一行只替换第一次出现 |
gc | 全局替换,每次替换前询问 |
eg:
:/\<root\>/rooter/gi
解题:以“/”为间隔符从文中查找root单词,将它全局替换成rooter,并且忽略大小写。
★★需要注意的是★★
①在查找替换的过程中,“/”并不是指定的分隔符,原则上我们可以使用任意的符号作为分隔符,只需在前后保持一致即可。
②在替换查找的时候,vim可以使用基本正则表达式进行字符匹配(扩展正则不支持哟~)
既然说了那么多,不做几个练习怎么对的起我码了这么多字~~(呆滞脸~)
1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
:%s/^[[:blank:]]\+//g
解题:这里使用“/”作为分隔符,% 表示全文,s 表示搜索查找。使用了正则表达^[[:blank:]]\+
来表示文件中位于行首的空白字符,//g
中两个“//”中间什么都没有意味着删除了空白字符,g 表示全局替换。
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号。
%s/^\([[:space:]]\)/#\1/g
%s/^[[:space:]]/#&/
解题:正则表达式同上题相同,其中"\1"
是指后向引用,这点要注意,在vim里还可以使用"&"
引用前面查找时查找到的整个内容。
3、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
:%s@/etc/sysconfig/init@/var/log@gi
解题:这里使用了”@”符号作为分隔符,gi 表示全局替换且忽略大小写。
多窗口功能
使用vim编辑器可以同时对多个文件进行查看,而界面将会被分割成多个部分,语法格式如下:
vim -o| -O FILE1 FILE2
-o: 水平分割
-O: 垂直分割
有图有真相~~~~
水平分割图:
垂直分割图:
既然可以对多个文件进行分割查看,那单个文件可不可以呢?答案是当然的啦~~
老规矩,先来格式在上图:
命令 | 注释 |
---|---|
Ctrl+w,s | 水平分割 |
Ctrl+w,v | 垂直分割 |
ctrl+w,q | 取消相邻窗口 |
ctrl+w,o | 取消全部窗口 |
:wqall | 退出 |