Beng Dou

一只站在树上的鸟儿,从来不会害怕树枝断裂,因为它相信的不是树枝,而是它自己的翅膀。

导航

vi编辑器常用命令

  vi编辑器是Linux系统都会内置的文本编辑器,使用广泛。掌握vi编辑器的常见操作是使用Linux必备技能。

vi工作模式

  vi包含三种模式,分别是命令模式、插入模式、命令行模式。这三种模式的作用分别是:

  命令模式:可以使用上、下左右按键来移动光标,可以删除字符或删除整行来处理文件内容,也可以使用复制、粘贴来处理文件数据。通常vi打开文件就直接进入入一般模式。

  插入模式:主要是编辑文件内容。

  命令行模式:主要是提供查找字符串、替换字符串、显示行号、保存或取消文件修改等操作。

  三种模式有不同的作用,他们是之间的切换关系如下:

  命令模式 <-> 插入模式:命令模式下输入i, I, o, O, a, A, r, R等任何一个字母后进入插入模式。按Esc返回命令模式

  命令模式 <-> 命令行模式:一把模式下输入:、/、?三个中的任何一个字符进入命令行模式。按Esc返回命令模式。

  插入模式 <-> 命令行模式:不能互转。只能通过切换到命令模式再进行切换。

  说明:命令模式可以和插入模式及命令行模式切换, 但插入模式与命令行模式间不能相互切换,只能通过命令模式中转切换。图示如下:

 

   命令模式切换到插入模式不同插入字符的区别:

i 从目前光标所在处插入
I 目前所在行的第一个非空格符处开始插入
a 从光标所在的下一个字符处开始插入
A 从光标所在行的最后一个字符处开始插入
o 光标所在行的下一行插入新的一行。
O 光标所在行的上一行插入新的一行。
r 替换光标所在的那个字符一次
R 一直替换光标所在的文字,直到按下Esc键为止。

vi常用命令

  移动光标命令

h或向左键(←) 光标向左移劢一个字符
j或向下键(↓) 光标向下移劢一个字符
k或向上键(↑) 光标向上移劢一个字符
l或向右键(→) 光标向右移劢一个字符
Ctrl+f 向下翻一页
Ctrl+b 向上翻一页
n<space> 按下数字n后再按空格键,光标向右移动这一行n个字符
0 移动到这一行的最前面字符处
$ 移动到这一行的最后面字符处
G 移动到文件最后一行
nG 移动到文件第n行
gg 移动到文件第一行,相当于1G
n<Enter> 向下移动n行

  查找字符串命令

/word 向下查找字符串word。输入n,继续向下查找字符串word。输入N,向上查找字符串word(常用)
?word 向上查找字符串word。输入n,继续向上查找字符串word。输入N,向下查找字符串word(常用)

  替换字符串命令

:n1,n2s/word1/word2/g 在第 n1和n2行之间查找word1字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/g 从第一行到最后一行查找找 word1 字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认是否需要替换

  删除、复制与粘贴字符串命令

x,X x为向后删除一个字符,X为向前删除一个字符(常用)
nx n为数字,向后连续删除n个字符。
dd  删除游标所在的那一整行(常用)
ndd n为数字,删除光标所在的向下n行
d1G  删除光标所在到第一行的所有数据
dG  删除光标所在到最后一行的所有数据
d$  删除游标所在处,到该行的最后一个字符
d0  那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy  复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下n行
y1G  复制光标所在行到第一行的所有数据
yG  复制光标所在行到最后一行的所有数据
y0  复制光标所在的那个字符到该行行首的所有数据
y$  复制光标所在的那个字符到该行行尾的所有数据
p, P p为将已复制的数据在光标下一行粘贴,P则为粘贴在游标上一行!
J  将光标所在行与下一行癿数据结合成同一行
u  复原前一个劢作(常用)

  显示行号命令

:set nu  显示行号,设定后,会在每一行的前缀显示该行的行号
:set nonu  取消行号显示

  保存或取消文件修改命令

:wq  保存修改文件后退出(常用)
:wq! 强制保存修改文件后退出,常用于文件为只读情况。
:q  不保存文件退出(常用)
:q!  强制退出不保存文件,常用于若修改过文件但又不想保存情况

案例操作练习

  测试题目

1、在/tmp目录下建立一个名为vitest的目录;
2、迚入 vitest 这个目录当中;
3、将 /etc/man.config 复制到本目录下
4、使用vi打开man.config文件
5、在vi中设定一下行号
6、移动到第 58 行,向右移动 40 个字符
7、移动到第一行,并且向下搜寻一下bzip2字符串
8、接着下来,我要将 50100 行之间癿小写man字符串改为大写MAN字符串,并且一个一个挑选是否需要修改,如何操作?
9、修改完后,突然反悔了,要全部复原,有哪些方法?
10、我要复制 6573 这九行的内容,并且贴到最后一行之后
11、第21到42行之间的开头为 # 符号的批注数据我不要了,要如何删除?
12、移动到第27行,并且删除15个字符
13、在第一行新增一行,该行内容输入I am a student
14、保存文件修改后退出

  答案

中括号中的内容为要操作的命令:
1、[cd /tmp;mkdir vitest]
2、[cd vitest]
3、[cp /etc/man.config] .
4、[vi man.config]
5、输入[:set nu]
6、按[Esc]切换到命令模式,先输入[58G]再输入[40→]
7、先输入[1G]或[gg]后,再输入[/bzip2]
8、输入[:50,100s/man/MAN/gc]
9、(1)可以一直按[u]回复到原始状态,(2)使用不保存离开[:q!]后,再重新打开文件
10、输入[65G]移动到第65行, 然后再输入[9yy]之后最后一行会出现复制九行的说明字样。按下[G]到最后一行,再按[p]粘贴!
11、输入[21G]移动到第21行,再输入[22d]就删除22行
12、输入[27G]移动到第27行,再输入[15x]即可删除15个字符
13、输入[1G]移动第一行,然后输入大写字母[O]便新增一行且在插入模式;开始输入[I am a student]
14、按下[Esc]切花到命令模式,输入[:wq]保存文件退出

练习题

1、vi打开文件后,要在第34行向右移动15个字符,如何操作?
2、vi打开文件后,如何去到文件的页首或页尾?
3、vi打开文件后,如何在光标所在行中,移动到行首或行尾?
4、如何切换一般模式、命令行模式、编辑模式?
5、如何删除一行、n 行,如何删除一个字符?
6、如何复制一行、n 行并加以粘贴?
7、如何查找string这个字符串?
8、如何替换文件中所有的word1字符串成为word2?
9、如何保存、退出、保存后退出、强制保存后退出文件?
10、vi编辑文件做了很多修改后,如何还原成原来的文件内容?
11、vi打开文件后,如何显示行号和取消行号?

 参考资料

  1、鸟哥Linux私房菜基础学习篇<第三版>,鸟哥 著

posted on 2017-12-11 22:21  锅边糊  阅读(2854)  评论(0编辑  收藏  举报