Linux vi常用指令使用案例汇总
原创
©著作权归作者所有:来自51CTO博客作者Shen Liang的原创作品,请联系作者获取转载授权,否则将追究法律责任
Linux vi常见命令使用案例
声明与简介
本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。本文主要介绍Linux内置的编辑器vi的使用。
vi编辑器是所有Unix及Linux系统下标准的编辑器,它简单实用且功能强大。因为我们工作的环境多为Linux,安装配置各种软件时多以命令行的形式,这时就难免会用到vi,所以熟练使用它是基本的必备技能。本文主要介绍常见的vi命令的使用。
注:本文会根据实际实践更新。
vi使用模式
vi的使用模式有三种:一般模式、编辑模式、命令模式。
- 一般模式可以理解为在外部对文件内容进行修改(删除)和光标的跳转、复制、粘贴、替换、删除等操作。详细命令见一般模式相关章节。
#进入一般模式可以通过如下方式:
vi filename #普通方式打开
vi + filename #打开文件光标到文末
vi +n filename #打开文件光标到n行
vi -r filename #以恢复方式打开文件,这里r是recover
vi +/pattern filename #以匹配pattern方式打开文件,即光标定位到pattern匹配处。
- 编辑模式则输入进入文件内部进行内容的维护(增、删、改),这里是用户的实际编辑操作,底部会显示-- INSERT -- 字样。通过键盘上最左脚的ESC键可以切换到一般模式。
- 命令模式则对文件的保存、格式设置、全局查找(替换)。一般模式下通过:和/或?可以切换到该模式。详细命令见命令模式相关章节。
一般模式
光标控制
光标控制,应用在一般模式下,它主要是控制光标的位置,即切换光标。比如将光标切换到文件的首行、尾行,某一行的首、尾等场景。
# 1 这里的n是光标要跳转的行号,比如4G则会跳转到文件的第4行首。
# 注:1 该命令一般结合 :set nu一起使用,即先显示行号,再跳转。
# 2 文件行首可以通过1G实现。
nG
# 2 光标跳转的尾行的首位。这里G是大写。
G
# 3 光标跳转到当前行的行首。这里是数字0
0
# 4 光标跳转到行尾。
# 比如通过3G命令跳转到文件的第3行,这时再输入$,则会到第3行的尾部。
$
# 5 #光标局部单词级光标移动:围绕键盘的h、j、k、l定义的左、下、上、右光标局部跳转(一次一个字符)键,当然也可以通过↑↓←→,即上下左右键达到同样的效果。
h、j、k、l
↑ ↓ ← →
# 6 局部移动字级光标移动,这里w(右移一个单词word)、W(右移动一个单词word和标点),由于VI是主要面向英文环境,而英文的写作环境默认是空格作为单词间的空格,所以这里跳转的依据是空格。
# 不同的是W会跳过标点,而w则不会。而b(左移一个单词word)、W(左移一个单词word和标点)。
w(W)
b(B)
# 7 句子段落跳转( 控制句子的跳转,跳到句子的开头,)则跳到句子的结尾。{控制跳转到段落的开头,}则跳到段落的结尾。
( )
{ }
# 8 针对文件内容较多的情况,可以通过翻页命令控制。
# ctl b(PgUp)上翻,即往前(历史)翻页、 相当于back
# ctl f(PgDn)下翻,即往后(正前)翻页。相当于forward
# ctl u上翻半页,u相当于up
# ctl d下翻半页,d相当于down
# H代表当前页前部区域,H相当于head
# M代表当前页中部区域,M相当于Middle
# L代表当前页后部区域,L相当于Last
ctl+b、PgUp
ctl+f、PgDn
ctl+u
ctl+d
H
M
L
进入编辑模式
这种是由一般模式切换到编辑模式。
# 1 在当前光标前插入文本。这里i相当于insert
i
# 2 在当前行首插入文本,这里是大写的I
I
# 3 在当前光标后插入文本。这里a相当于append
a
# 4 在当前行末插入文本。
A
# 5 在当前行后面插入一空行 这里是字母0,不是数字0.
o
# 6 在当前行前面插入一空行
O
文本编辑
该部分主要涵盖在一般模式下对文本编辑的常见操作:如复制、粘贴、删除、替换等。
# 1 剪切当前光标下的字符 这里相当于ctl+x
x
# 2 删除光标所在的行
dd
# 3 删除光标之后的该行剩余部分,输入时先写d再SHIFT+4(即$)
d$
# 4 删除光标之后的单词剩余部分,单词级别这里单词不是严格意义上的单词。
dw
# 5 删除光标后字符,进入INSERT模式
cw
# 6 删除整行并进入INSERT模式
cc
# 7 以替换方式进入编辑 这里R相当于replace
R
# 8 删除光标(含)之后的n行
ndd
# 9 将光标所在行复制到缓冲区内。
yy
# 10 将光标所在行(含)后n行复制到缓冲区内。
nyy
# 11 将光标所在行(含)后n+1行复制到缓冲区内。
yn
# 12 将后面的n个单词移到
# 注:这里不是严格按照真正意义上的单词来计算。标点也算单词,如果光标在一个单词的中间,则后面也算一个单词。
ynw
# 13 光标后粘贴 #1 如果缓冲区里是多个单词则粘贴剪切板中的内容到当前光标之后
# 2 如果缓冲区里是一整行内容,则会在光标所在的行之后插入空行然后再插入整行内容。
p
# 14 光标前粘贴 #1 如果缓冲区里是多个单词则会粘贴剪切板中的内容到当前光标之前。
# 2 如果缓冲区里是一整行内容,则在光标所在的行前插入整行内容和空行。
P
# 15 撤销最近的操作,可以多次执行 撤销命令需要在一般模式下操作。
u
# 16 撤销当前行的编辑
U
# 17 修改光标后的一个单词,这里的单词不是严格意义的单词。
# 注:1执行后进入INSERT模式。
# 2 输入ESC后退出INSERT模式。
cw
# 18 修改修改光标后的n个单词,这里的单词不是严格意义的单词。
cnw
命令模式
文件操作
在进入一般模式后以”:”的方式进入。可执行文件的保存、关闭等。
# 1 保存退出,注意要大写
ZZ
# 2 保存文件filename
:w filename
# 3 保存退出
:wq
# 4 写入文件
:W
# 5 写入文件
:x
# 6 不保存退出
:q!
# 7 退出
:q
匹配与替换
主要在命令行模式完成模式查找、字符替换操作。
# 1 当前光标往后匹配要查找的单词word或关键字。
# 注:如果匹配不到,则从顶部开始匹配。会出现如下警告:search hit BOTTOM, continuing at TOP
/word
# 2 当前光标往前匹配要查找的单词word或关键字。
?word
# 3 重复执行之前查找命令,往后(下)查。
n →
# 4 重复执行之前查找命令,往前(上)查
N →
# 5 对n1和n2直接的行用word2替换word1,即用后面的替换前面的。
# 注:这里g是global的缩写,即所有的都要替换
:n1,n2s/word1/word2/g
# 6 效果同上,不过这里没加g,如果一行里出现多个word1,那么只会替换首次出现的。
:n1,n2s/word1/word2
# 7 替换效果同上,不过这里替换的是光标所在的行且不是全局替换。
:s/word1/word2
# 8 对从n1开始用word2替换word1,即用后面的替换前面的。
#注:1 这里的$相当于文件的末尾的意思。
# 2 第二种方式的。(点)相当于文件的开头。
:n1,$s/word1/word2/g
:.,$s/word1/word2/g
# 9 替换每一行里的首个word1为word2.
# 注:1 这里的%相当于匹配每一行
# 2 第二种方式以g开头,意思是每一个行。
:%s/word1/word2/
:g/vivian/s//sky/
# 替换每一行里的word1为word2.
# 注:1 作用同上
# 2 第二种方式的g是gloabal,即每行里都全部替换的意思。
:%s/word1/word2/g
:g/vivian/s//sky/g
替换示例
原文件内容
#将第9行到11行里的of全部替换为OF
:9,11s/of/OF/g
#如果只是替换某行里的第一个则不用加g参数,详细见前文列表出介绍
全局替换后