Linux-VI编辑器


在很多Liunx发行版中的vi编辑器其实也就是vim编辑器,此篇文章所说的vi等价于vim。vi编辑器是 Visual interface 的简称,其共有三种工作模式: 命令模式编辑模式末行模式

一、用vi编辑器打开文件

下面三个命令均属于shell终端命令,不是在vi编辑器中的命令。

命令功能说明
vi 文件名打开文件,并将光标定位在文件开头如果文件不存在则创建文件
vi 文件名 +打开文件,并将光标定位在文件末尾如果文件不存在则创建文件
vi 文件名 +数字打开文件,并将光标定位在数字指定的行数如果文件不存在则创建文件

注:用vi编辑文件且没有保存时,如果遇到意外情况,导致文件编辑异常关闭,在下次打开这个文件时可能会看到 交换文件的提示信息,一般操作是 输入 D 将交换文件删除(或者在shell终端使用 rm 命令将交换文件删除,交换文件名一般为:.文件名.swp),不过删除交换文件后,异常关闭前未保存的文件会丢失

二、3种工作模式

  • 命令模式
  • 编辑模式
  • 末行模式
    三种模式之间的切换如图:

1. 命令模式

1.1 重复命令

命令功能说明
.重复上次的命令英文符号的点
数字+命令将命令重复数字指定的次数

1.2 移动命令

  • 一般移动
命令功能说明
h光标向左移动小写,推荐用食指
j光标向下移动小写,推荐用食指
k光标向上移动小写,推荐用中指
l光标向右移动小写,推荐用无名指
行内移动
w向后移动一个单词小写,word
b向前移动一个单词小写,back
0移动到行首数字零
^移动到行首shift+6,移动到行首第一个非空白字符的位置
$移动到行尾shift+4
行间移动
gg移动到文件第一行小写
G移动到文件最后一行大写
数字+gg移动到数字指定的行数或数字+G,或末行模式 -> 数字 -> 回车
段落移动
{移动到上一段落vi以空行来区分段落
}移动到下一段落vi以空行来区分段落
括号切换
%最近的一对括号之间来回切换
  • 标记移动
命令功能说明
m+字母做标记mark,这个字母可以是 a ~ z 或者 A ~ Z 之间的任何一个字母
+字母返回标记英文单引号,例如,要回到已经被标记的x位置,输入 'x 即可

被添加标记的行被删除时,该行的标记也会被删除;
如果在其他行添加了相同名称的标记,之前添加的标记也随之删除。

1.3 屏幕滚动

命令功能说明
ctrl+b向上翻页小写,back
ctrl+f向下翻页小写,forward
H屏幕顶部大写,Head
M屏幕中间大写,Middle
L屏幕底部大写,Low

1.4 选择文本

选择文本时会进入一种特殊的模式:可视模式(Visual)。
可视模式分为三种:

  • 一般可视模式(以字符为单位);
  • 可视行模式(以行为单位);
  • 可视块模式(以块为单位)。
    要进入可视模式同样需要在命令模式输入命令来完成。
命令功能说明
v一般可视模式小写,从光标位置开始,以字符为单位选择文本
V可视行模式大写,从光标所在行开始,以行为单位选择文本
ctrl+v可视块模式小写,从光标位置开始,在垂直方向以块为单位选择文本

1.5 撤销&恢复撤销

命令功能说明
u撤销小写,undo,撤销上一次命令的操作,可以一直撤销
ctrl+r恢复撤销小写,redo,对已经撤销的操作做恢复

1.6 删除&复制&粘贴

  • 删除文本的操作,本质上就是剪切操作,可和复制命令一样,使用粘贴命令将文本进行粘贴。
  • vi编辑器是将删除和复制的文本放在vi缓冲区中。复制命令会将复制的文本放在缓冲区,删除命令会将删除的文本的放在缓冲区。
  • 粘贴命令会将vi缓冲区中的文本粘贴到光标所在位置。
  • 文本缓冲区与系统剪切板不是同一个。
命令功能说明
删除
x删除字符x小写,删除光标所在的字符
dd删除一行删除光标所在位置的行
D删除至行尾从光标所在的位置删除至行尾
数字+dd删除多行例如:7dd,即删除7行(包含光标所在位置的行)
d+移动命令删除多个字符结合移动命令,删除原位置与目的位置之间的文本
选择文本+x删除多个字符x小写,删除可视模式中被选择的文本
选择文本+d删除多个字符删除可视模式中被选择的文本
复制
yy复制一行复制光标所在位置的行
数字+yy复制多行例如:7yy,即复制7行(包含光标所在位置的行)
y+移动命令复制多个字符结合移动命令,复制原位置与目的位置之间的文本
粘贴
p粘贴paste,将vi缓冲区中的文本粘贴到光标所在位置

删除/复制命令中的 “d+移动命令” 举例:

  • dw,从光标位置删除/复制到单词末尾
  • d0,从光标位置删除/复制到该行的起始位置
  • d},从光标位置删除/复制到段落末尾
  • d+数字+G,删除/复制光标所在行到指定行之间文本
  • d+’+字母,删除/复制光标所在行到指定标记行之间的文本

1.7 缩进

命令功能说明
>>向右缩进4字符英文的两个大于号
<<向左缩进4字符英文的两个小于号

注:在可视模式下,缩进命令只需要一个 > 或 < 并选中多行即可实现多行同时缩进

1.8 查找&替换

命令功能说明
查找
/+文本内容常规查找查找相应的文本内容,n查找下一个,N查找上一个
*单词快速向下查找向后查早当前光标所在的单词
#单词快速向上查找向前查早当前光标所在的单词
替换
r替换当前字符replace,先输入小写r再输入需要替换的字符
R替换当前光标后的字符进入替换模式,替换完成后按esc键退出,如同Windows的inster键的功能

在开发中,通过单词快速查找,可以快速的看到这个单词还在文本中其他什么位置使用过

  • 查找并替换
    不同于上面的查找替换,需要在 末行模式 中执行。
    基本格式::%s///gc
命令功能说明
%s/旧文本/新文本/g全局替换一次性替换文件中出现的所有旧文本
s/旧文本/新文本/g可视模式替换需要先用可视模式选中要替换的文字区域替换
%s/旧文本/新文本/gc确认替换推荐使用,替换时会有交互式的询问

注:

  • 可视模式替换:替换时,末行模式会自动添加 ‘<,’> 的命令,不用理会,在后面接着书写 s/旧文本/新文本/g 即可。
  • 确认替换的命令:
    y(yes)-- 替换
    n(no)-- 不替换
    a(all)-- 全部替换
    q(quit)-- 取消替换
    l(last)-- 最后一次替换,替换当前这个后会取消替换
    ctrl+E 向下滚屏
    ctrl+Y 向上滚屏

2. 编辑模式

2.1 插入命令

命令功能说明
i在光标前插入i小写,insert,常用
I在当前行的行首插入I大写,insert,一般常用
a在光标后插入a小写,append,常用
A在当前行的行尾插入A大写,append,一般常用
o在当前行后插入空行o小写,常用
O在当前行前插入空行O大写,常用

2.2 插入命令与重复命令联用

重复命令见本篇文章的 1.1 重复命令
(1) 在命令模式输入 10
(2) 输入 i 进入编辑模式
(3) 输入 * 也就是需要重复的文字
(4) 按下esc返回命令模式

  • 返回命令模式后,vi会将 (2)(3) 再重复执行9次,共插入了10个次文本
  • 再按下.(点)即可重复上述(1)(2)(3)(4)再插入10次文本

注:正常开发操作时,需谨慎使用,尽量不用,因为操作不当会导致编辑的内容重复多次,用 u 撤销会将编辑的内容全部撤销

2.3 插入命令与可视化块联用

可视化块见本篇文章的 1.4 移动文本->可视化块
可以利用可视化块给多行代码添加注释:
(1)将光标定位到要添加注释的第1行代码,并使用 ^ 将光标移动到行首
(2)按 ctrl+v 进入到可视化块模式
(3)使用j向下移动光标至要添加注释的最后一行,进行内容选中
(4)输入I(大写)进入编辑模式,并在行首进行文本插入
(5)编辑插入 #(也就是python中的注释符号)
(6)按下esc返回命令模式,返回之后 vi 会在(3)选中的内容前都插入 #

3. 末行模式

3.1 保存&退出

命令功能说明
保存
w保存文件w小写,write,保存当前文件
w+空格+文件名/目录文件另存为w小写,write,将当前文件另存为
退出
q退出viquit,如果没有保存不可以退出
q!强制退出viquit,不保存退出,未保存的内容将会丢失
保存并退出
wq保存文件并退出viwrite&quit
x保存文件并退出vix小写,和 wq 命令作用相同

3.2 新建文件&切换文件

命令功能说明
n+空格+文件名/目录新建文件new
e+空格+文件名/目录切换为其他文件edit

注:这两个命令执行前必须保证当前文件已经被保存

3.3 查找并替换

见本篇文章的 1.8 查找&替换->查找并替换

3.4 取消高亮

命令功能说明
:noh取消高亮可以取消文本查找等对文本产生的高亮

3.5 分屏操作

命令功能说明
增加分屏
sp+空格+文件名/目录横向增加分屏split
vsp+空格+文件名/目录纵向增加分屏vertical split
分屏操作
ctrl+w+w切换到下一个窗口w均小写,window
ctrl+w+r将两个窗口互换位置w&r小写,reverse
ctrl+w+c关闭当前窗口w&c小写,close,但不能关闭最后一个窗口
ctrl+w+q退出当前窗口w&q小写,quit,如果是最后一个窗口则关闭vi
ctrl+w+o关闭其他窗口w&o小写,other
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值