vi和vim的使用

一、vi/vim介绍

vi是Linux系统下最基本的文本编辑程序,工作在字符模式下,不需要图形界面。

vim是从vi发展而来的文本编辑器,具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

vi/vim键盘图

vi-vim键盘图

二、vi/vim的使用

2.1 三种工作模式

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)
和底行模式(last line mode),各模式的功能区分如下:

  • 命令模式(command mode):控制屏幕光标的移动,字符、字或行的删除,移动复制某区
    段及进入Insert mode下,或者到 last line mode。
  • 插入模式(Insert mode):只有在Insert mode 下,才可以做文字输入,按ESC键可回
    到命令行模式。
  • 底行模式(last line mode):将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、
    列出行号等。

三种工作模式的状态切换如下图

image-20251202092023808

2.2 三种工作模式常用命令

2.2.1 命令模式

命令 执行效果
i 切换到输入模式,在光标当前位置开始输入文本
x 删除当前光标所在处的字符
: 切换到底行命令模式,以在最底一行输入命令
a 进入插入模式,在光标下一个位置开始输入文本
o(小写) 在当前行的下方插入一个新行,并进入插入模式
O(大写) 在当前行的上方插入一个新行,并进入插入模式
dd 剪切当前行
yy 复制当前行
p(小写) 粘贴剪贴板内容到光标下方
P(大写) 粘贴剪贴板内容到光标上方
u 撤销上一次操作
Ctrl+r 重做上一个动作
:w 保存文件
:q 退出vim编辑器
:q! 强制退出vim编辑器,不保存修改

2.2.2 输入模式

命令 执行效果
字符按键以及Shift组合 输入字符
Enter 回车,换行
Backspace 删除光标前一个字符
Delete 删除光标后一个字符
方向键 在文本中移动光标
Home/End 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标尾输入/替换模式
Esc 退出输入模式,切换到命令模式

2.2.3 底行模式

命令 执行效果
:w 保存文件
:q 退出vim编辑器
:wq 保存文件并退出vim编辑器
:q! 强制退出vim编辑器,不保存修改

三、vi/vim的按键说明

3.1 命令模式

3.1.1 光标移动

命令 执行效果
hjkl 功能分别等同于左、下、上、右箭头键
Ctrl+fPage Down 屏幕向下移动一页(常用)
Ctrl+bPage Up 屏幕向上移动一页(常用)
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
n<space> n为数字,按下数字后再按空格键,光标会向右移动这一行的 n 个字符
0Home 移动到这一行的最前面字符处 (常用)
$或End 移动到这一行的最后面字符处(常用)
G 移动到这个文章的最后一行(常用)
nG n为数字,移动到这个文章的第 n 行(可配合:set nu
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n<Enter> n为数字,光标向下移动 n 行(常用)

3.1.2 搜索替换

命令 执行效果
/word 向光标之下寻找一个名称为 word 的字符串,按Enter结束word输入(常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串
n 这个 n 是英文按键。代表重复前一个搜寻的动作。比如执行完/word,按下n就是向下继续搜索word,并且搜索到末尾会自动回到开头循环搜索(常用)
N 这个 N 是英文按键。与 n 刚好相反,为反向进行前一个搜寻动作。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
:1,$s/word1/word2/g:%s/word1/word2/g** 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc:%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

3.1.3 删除、复制与粘贴

命令 执行效果
x,X 在一行字当中,x 为向后删除一个字符 (相当于 del 键), X 为向前删除一个字符(相当于 Backspace 键) (常用)
nx n 为数字,连续向后删除 n 个字符
dd 剪切游标所在的那一整行,用 p/P 可以粘贴。(常用)
ndd n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行,用 p/P 可以粘贴。(常用)
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
p,P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! (常用)
u 撤销上一次操作。(常用)
Ctrl+r 重做上一个动作。(常用)
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复粘贴等等动作,按下小数点.就好了! (常用)

3.1.4 文本选中

vi可进入到一种称为visual的模式,在该模式下,用户可以用光标移动命令可视地选择文本,然
后再执行其他编辑操作,例如删除、复制等。

命令 执行效果
v 可视字符模式
V 可视行模式

3.2 输入模式

3.2.1 进入输入或取代的编辑模式

命令 执行效果
i,I 进入输入模式 i 为从目前光标所在处输入, I 为在目前所在行的第一个非空格符处开始输入。 (常用)
a, A 进入输入模式: a 为从目前光标所在的下一个字符处开始输, A 为从光标所在行的最后一个字符处开始输入。(常用)
o, O 进入输入模式(Insert mode):o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 Esc 为止
Esc 退出编辑模式,回到命令模式中(常用)

3.3 底行模式

3.3.1 保存退出和暂时离开

命令 执行效果
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为只读时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于:wq
ZQ 不保存,强制退出。效果等同于 :q!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 filename这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到Shell指令行模式下执行 command 的显示结果!例如 :! ls /home即可在 vi 当中查看 /home 底下以 ls 输出的档案信息!

3.3.2 行号

命令 执行效果
:n 将光标移到第 n 行(常用)
:set nu 显示行号(常用)
:set nonu 取消行号显示(常用)

3.3.3 恢复文件

vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结
尾。vi 在正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令,也可以在启动 vi 时利用 -r 选项。

命令 执行效果
:recover 恢复文件

四、参考

Linux vi/vim | 菜鸟教程 (runoob.com)

posted @ 2025-12-02 11:40  wangxinzhi  阅读(51)  评论(0)    收藏  举报