在linux 系统,以及unix 系统中,vi 都是自带的编辑器,小巧,而且轻量,并且90%的unix系统,以及类unix系统,都会有。初学者可能会觉得vi编辑器特别难用,其实不然,vi编辑器使用好了,很好用
标题这里还提到了vim,那么它和vi有什么区别呢,简单的来讲,vim是vi的升级版本,完全兼容于vi,vim相于vi来讲,有很多新的特性,其中最特别的一点,就是语法加亮,也就是说vim可以给文字(代码)加上颜色,比如说在写shell 脚本时,里的if和for,会变成黄色,注释会变成蓝色,而写错了,则就不会变色,当然有些代码还是白色的,不要以为是写错,另外一点,就是有的说vim可以多级撤销,而vi只能撤销一级,这个我亲自试验了一下,vi也可以进行多级撤销,并不是一级,这个也许是版本的问题吧,我们先不追究,一般我是使用vim,因为带颜色。还有一点,就是使用vim的话,进入以后,会记录你上次修改文件后,所停留的的地方,也就是说,光标是停留在你上次修改文件所在那一行的行首。而这个,vi是没有的。
下面使用两个图,来看一下vim带颜色的功能
下面来讲一下编辑器的使用,这里就直接说了,不管是vi,还是vim,都是一样的
vi编辑器总共有三种模式,分别是命令模式,编辑模式和末行模式。
其中,命令模式,并不是指我们在系统shell中,输入一个命令,按回车后执行,在vi编辑器,命令模式是指,在键盘上按一个按键,或者按键的组合,命令即被执行。
编辑模式,也就是编辑这个文件,这个模式下,键盘所有的输入都会被录入文件中。左下角会显示一个 — INSERT — 或者 — REPLACE — 代表是插入模式,和覆盖模式。
而末行模式,按下冒号 :即可进入,然后输入相应的命令,按回车后执行。比如按下冒号 : ,然后输入 set nu ,再按回车,命令即被执行,这个时候,行号会被显示出来。
在shell中,建入 vi 或者 vim 回车,有的系统只带了 vi,不带 vim,或是执行 vim 提示没有这个命令的话,安装一下即可,使用 vi 或者 vim,后面跟文件名,就是打开相应的文件 (比如:vim /etc/httpd/conf/httpd.conf),即可进入 vi 或者 vim 编辑器。这个时候,是命令模式。可以移动光标,当然在编辑模式下,也可以移动。移动光标有两种方式,一个是使用键盘上的上下左右方向键移动光标,还有一个就是 h j k l 这几个键,分别对应的方向为:
h 向左移动一个字符 (左)
j 向下移动一个字符 (下)
k 向上移动一个字符 (上)
l 向右移动一个字符 (右)
进入编辑模式,有如下几个命令,区别如下:
i 在光标 左侧 输入字符
a 在光标 右侧 输入字符
o 小写字母 o ,在光标 所在的下一行,添加新行,并输入字符
O 大写字母 O ,在光标 所在上行一行,添加新行,并输入字符
I 大写字母 I ,在光标所在那一行,的行首 输入字符
A 大写字母 A ,在光标所在那行,的行末 输入字符
s 小写字母 s , 删除光标所在的字符,并进入编辑模式
S 大写字母 S , 删除光标所在的那一行,并进入编辑模式
PS:也可以按 Ins 键进入编辑模式,按 Ins 相当于 i ,再次按 Ins 则会成为 REPLACE 模式,和我后面提到的 R 是一样的
进入编辑模式以后,正文输入完了,按一下 Esc 键盘,即可再次回到命令模式。
命令模式下的几个编辑类
x 删除当前光标所在的字符 (也可使用del键)
dd 删除当前行
yy 复制当前行
10dd 删除当前行和以下的9行,一共删除10行,数字写多少就删除多少行
10yy 复制当前行,以及以下的9行,一共复制10行,数字改多少就复制多少行
p 小写字母p 粘贴,在当前光标所在行的下面粘贴
P 大写字母P 粘贴,在当前光标所在行的上面粘贴
r 替换单个字符,按下 r 后,再按一个字符,将会把光标所在的那个字符,替换为按 r 后紧接着按下的字符
R 一直替换,直到按 Esc 返回命令模式 (相当于进入编辑模式后按 Insert 键)
这几个介绍完了,再介绍一些其它常用的命令。
移动光标类
h 向左移动一个字符 (左)
j 向下移动一个字符 (下)
k 向上移动一个字符 (上)
l 向右移动一个字符 (右)
也可以使用键盘编辑区域的那个方向键
G 将光标移动到文件的最后一行的行首
gg 将光标移动到文件的第一行的行首
Ctrl + f 向后翻一页(也可使用 page down)
Ctrl + b 向前翻一页(也可使用 page up)
H 将光标移动到当前面的第一行
L 将光标移动到当前页的最后一行
0 数字 0 (不可使用小键盘区的数字0) 将光标移动到当前行的前首(也可使用 Home 键)
$ (shift + 4) 将光标移动到当前行的行末 (也可使用 End 键)
PS:这里我说一下,有使用 ssh 工具连接 linux 的,有的 ssh 工具 (ssh secure shell) ,在vi编辑器里面,Home、End、Page up、Page down 键等,全部不能用
末行模式类,按 : 进入末行模式(行号为绝对行号)
:set nu 显示行号
:123 将光标移动到第123行,数字写多少,就是移动到多少行
:w 保存文件
:q 退出文件 (若当前文件有改动,则不会退出)
:wq 保存文件,并退出编辑器 (ZZ 两个大写的ZZ,也可以保存并退出文件)
:q! 强制退出编辑器,不保存
:wq! 强制退出,并保存文件
:w /root/a.txt 将文件保存到 /root/a.txt 相当于另存为
:wq /root/a.txt 将文件保存到 /root/a.txt ,并退出编辑器,原文件不变,相当于另存为(若文件有改变,则不会退出,需要加 ! 强制退出)
:10w /root/a.txt 将文件的第10行,保存到/root/a.txt,数字写多少,就是保存多少行
:10,20w /root/a.txt 将文件的第10行至第20行,保存到 /root/a.txt
:.w /root/a.txt 将文件当然光标所在行保存到 /root/a.txt
:1,.w /root/a.txt 将文件的第一行至当前光标所在行保存到 /root/a.txt
:.,$w /root/a.txt 将当前光标所在行到文件结尾,保存到 /root/a.txt
这里看着好像很复杂,其实不复杂,可以简单的记一下,点 . 代表当前光标所在的行,逗号 , 代表至,多少至多少,$ 代表结尾行。若是要保存的文件(/root/a.txt)已经存在,需要在w后面加上叹号 ! 会覆盖掉原有文件。
:.+5 将光标从当前行向下移动5行
:.-5 将光标从当前行向上移动5行
:r /etc/shells 读取 /etc/shells 文件,并在当前行的下一行插入
:e /etc/shells 关闭当前文件,并打开 /etc/shells 文件(若当前文件被修改,没有保存,则不会执行)
查找与替换
在命令行模式建入,然后需要回车执行
/linux 从当前光标所在的地方,开始向下查找 linux 字符,找到后,按 n 继续向下查找,按大写 N (shift + n) 向上查找
?linux 从当前光标所在的地方,开始向上查找 linux 字符,找到后,按 n 继续向上查找,按大写 N (shift + n) 向下查找
:s/linux/unix 将光标所在的行,首次出现的 linux 替换为 unix
:s/linux/unix/g 将光标所在的行,所有 linux 替换为 unix
:10,15s/linux/unix/g 将第10行至行15行,所有的 linux 字符替换为 unix
:%s/linux/unix/g 将文件中所有出来 linux 的字符,替换为 unix 相当于全文件全部替换
PS:实用技巧
:1,10s/#//g 将第一行至第10行的 # 注释全部取消
:1,10s/^/#/g 将第一行到第10行添加 # 注释
#号 分号 ; 都可以用这种方法替换,可以 C C++ 语言中的 // 该怎么用 vi 去批量注释和取消注释呢
:10,20s#^#//#g 第一行到第10行添加 // 注释
:10,20s#^//##g 取消第一行至第10行的 // 注释