Skip to content

vi基本操作

方跃明 2019-05-10

Linux上有大量的配置操作,需要掌握文本编辑器,通常使用vi。 vi是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi。 vi命令繁多但是如果使用灵活之后将会大大提高效率。 vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi)。 在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim。

shell
vi [filename]     # 用vi打开文件filename

command mode(命令模式)

任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使vi进入命令行模式;我们在shell环境(提示符为$)下输入启动vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是vi的合法命令,vi会响铃报警。

input mode(编辑模式)

在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按"ESC"键即可。

last line mode(行末模式)

末行模式也称ex转义模式。vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。

vi-keymap

命令说明
:w保存文件
:w filename保存至filename文件
:q退出编辑器(文件未被修改)
:q!退出编辑器,且不保存
:wq退出编辑器,且保存文件
:x退出编辑器,且保存文件
:set nu显示行号
:set nonu取消显示行号
:set fileformat=unix将文件修改为unix格式,如win下面的文本文件在linux下会出现^M
:s/old/new用new替换行中首次出现的old
:s/old/new/g用new替换行中所有的old
:n,m s/old/new/g用new替换从n到m行里所有的old
:%s/old/new/g用new替换当前文件里所有的old
:e otherfilename编辑文件名为otherfilename的文件
/keyword向光标下搜索keyword字符串
?keyword向光标上搜索keyword字符串
a在当前光标位置的右边添加文本
i在当前光标位置的左边添加文本
A在当前行的末尾位置添加文本
I在当前行的开始处添加文本(非空字符的行首)
O在当前行的上面新建一行
o在当前行的下面新建一行
R替换(覆盖)当前光标位置及后面的若干文本
J合并光标所在行及下一行为一行(依然在命令模式)
x删除当前字符
nx删除从光标开始的n个字符
dd删除当前行
ndd向下删除当前行在内的n行
u撤销上一步操作
U撤销对当前行的所有操作
yy将当前行复制到缓存区
ayy复制当前行到a缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
nyy将当前行向下n行复制到缓冲区
anyy复制前行向下n行到a 缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
yw复制从光标开始到词尾的字符
nyw复制从光标开始的n个单词
y^复制从光标到行首的内容
y$复制从光标到行尾的内容
p粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用ap进行粘贴
P粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用aP进行粘贴
h向左
j向下
k向上
l向右
Space向右
Backspace向左
Enter移动到下一行首
-移动到上一行首
n向下搜索前一个搜素动作
N向上搜索前一个搜索动作
n+向下跳n行
n-向上跳n行
nG跳到行号为n的行
G跳至文件的底部
Linux