2408 2018-11-10 2020-06-25
一、为何要学vim
Linux下文本编辑器那么多,为什么要学这不是很友善的vi呢?其实是有原因的,如下
- 所有的UNIX like系统都会内置vi文本编辑器,其他的文本编辑器不一定会存在。
- 很多软件的编辑接口都会主动调用vi(例如后来会谈到的crontab,visudo,edquota等命令)。
- vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。
- 程序简单,编辑速度相当快速。
其实重点是上述的第二点,因为太多的Linux上面的命令都默认使用vi作为数据编辑的接口,所以你必须要学会vi,否则很多命令你根本无法操作。这样说,有刺激到你务必学会vi的热情了吗?
那么什么是vim呢?其实你可以将vim视为vi的高级版本,vim可以用颜色或底线等方式来显示一些特殊的信息。举例来说,当你使用vim去编辑一个C程序语言的文件,或者是我们后续会谈到的shell script程序时,vim会依据文件的扩展名或者是文件内的开头信息判断该文件的内容,而自动调用该程序的语法判断式,再以颜色来显示程序代码与一般信息。也就是说,这个vim是个“程序编辑器”。甚至一些Linux基础配置文件内的语法,都能够用vim来检查。
简单来说,vi是老式的文字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连vim的官方网站(http://www.vim.org)自己也说,vim是一个“程序开发工具”而不是文件处理软件。因为vim里面加入了很多额外的功能,例如支持正则表达式的查找架构、多文件编辑、块复制等。这对于我们在Linux上面进行一些配置文件的修订工作时是很棒的一项功能。
二、vi的使用
基本上vi共分为3种模式,分别是一般模式、编辑模式与命令行模式。这3种模式的作用分别如下。
1、一般模式
以vi打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用上下左右案件来移动光标,你可以删除字符或删除整行,也可以复制、粘贴你的文件数据。
2、编辑模式
在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件内容的。要等到你按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。通常在Linux中,按下这些按键时,在界面的左下方会出现INSERT或REPLACE的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按下『Esc』这个按键即可退出编辑模式。
3、命令行模式
在一般模式当中,输入“:、/、?”3个中的任何一个按钮,就可以将光标移动到最下面那一行。在这个模式当中,可以提供你查找数据的操作,而读取、保存、大量替换字符、离开vi、显示行号等的操作则是在此模式中完成的。
注意:一般模式与编辑模式及命令行模式可互相切换,但编辑模式与命令行模式之间不可互相切换。
三、按键说明
1、一般模式下的按键
1、移动光标
按键 | 说明 |
---|---|
h或向左箭头键(<-) | 光标向左移动一个字符 |
j或向下箭头键 | 光标向下移动一个字符 |
k或向上箭头键 | 光标向上移动一个字符 |
l或向右箭头键 | 光标向右移动一个字符 |
多次移动(如向左移动30行) | 30h或3<- |
ctrl + f | 屏幕向下移动一页,=PageDown按键(常用) |
ctrl + b | = PageUp按键(常用) |
ctrl + d | 屏幕向下移动半页 |
ctrl + u | 屏幕向上移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n『space』 | 那个n表示”数字”,例如20。按下数字后再按空格键,光标会向右移动这一行的n个字符。 |
0或『Home』 | 这是数字0:移动到这一行的最前面字符处(常用) |
¥或『End』 | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个文件的最后一行(常用) |
nG | n为数字。移动到这个文件的第n行 |
gg | 移动到这个文件的第一行,相当于1G(常用) |
n『Enter』 | n为数字。光标向下移动n行(常用) |
2、查找与替换
按键 | 说明 |
---|---|
/word | 向下寻找一个名称为word的字符串(常用) |
?word | 向上寻找一个字符串名称为word的字符串 |
n | 这个n是英文按键。代表重复前一个查找的操作 |
N | 这个N是英文按键。与n刚好相反,为”反向”进行前一个查找操作 |
:n1,n2s/word1/word2/g | n1与n2为数字。在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2(常用) |
:1,$s/word1/word2/g | 从第一行到最后一行查找word1字符串,并将该字符串替换为word2(常用) |
:1,$s/word1/word2/gc | 从第一行到最后一行查找word1字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认(confirm)是否需要替换(常用) |
3、删除、复制和粘贴
按键 | 说明 |
---|---|
x,X | 在一行字当中,x为向后删除一个字符(相当于『Del』按键),X为向前删除一个字符(相当于『Backpace』)(常用) |
nx | n为数字,连续向后删除n个字符。举例来说,我要连续删除10个字符,”10x” |
dd | 删除光标所在的那一整行(常用) |
ndd | n为数字,删除光标所在的向下n行,例如20dd则是删除20行(常用) |
d1G | 删除光标所在行到第一行的所有数据 |
dG | 删除从光标所在行到最后一行的所有数据 |
d$ | 删除从光标所在处到该行的最后一个字符 |
d0 | 那个数字是0,删除从光标所在处到该行的最前面一个字符 |
yy | 复制光标所在的那一行(常用) |
nyy | n为数字,复制光标所在的向下n行(常用) |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 复制光标所在行到最后一行的所有数据 |
y0 | 复制光标所在行到 |
p,P | p为将已复制的数据在光标下一行粘贴,P则为粘贴在光标上一行(常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除10行,”10cj” |
u | 复原前一个操作(常用) |
ctrl + r | 重做上一个操作(常用) |
. | 小数点,重复前一个操作(常用) |
2、切换到编辑模式
按键 | 说明 |
---|---|
i,I | 进入插入模式(Insert mode):i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入(常用) |
a,A | 进入插入模式:a为从目前所在的下一个字符开始插入,A为从光标所在行的最后一个字符处开始插入(常用) |
o,O | 进入插入模式:o为在目前光标所在的下一行插入新的一行,O为在目前光标所在处的上一行插入新的一行(常用) |
r,R | 进入替换模式(Replace mode):r只会替换光标所在的那一个字符一次,R会一直替换光标所在的文字,知道按下『Esc』键为止(常用) |
3、命令行模式下的按键
按键 | 说明 |
---|---|
:w | 将编辑的数据写入硬盘文件中(常用) |
:w! | 若文件属性为只读时,强制写入该文件。不过,到底能不能写,还是跟你对该文件的文件权限有关啊 |
:q | 离开vi(常用) |
:q! | 若曾修改过文件,又不想存储,使用!为强制离开不保存文件 |
:wq | 保存后离开,若为”:wq!”则为强制保存离开(常用) |
ZZ | 大写的Z,若文件没有改动,则不保存离开,若文件已被改动,则保存离开 |
:w『filename』 | 将编辑的数据保存成另一个文件(类似于另存文件) |
:r『filename』 | 在编辑的数据中,读入另一个文件的数据,即将”filename”这个文件内容加到光标所在行后面 |
:n1,n2 w 『filename』 | 将n1,n2的内容保存成filename这个文件 |
:! command | 暂时离开vi到命令行模式下执行command的显示结果。例如”:! ls /home”即可在vi当中查看/home下面以ls输出的文件信息 |
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
四、vim实战
未完待续....
总访问次数: 294次, 一般般帅 创建于 2018-11-10, 最后更新于 2020-06-25
欢迎关注微信公众号,第一时间掌握最新动态!