vi基本操作
方跃明 2019-05-10
Linux上有大量的配置操作,需要掌握文本编辑器,通常使用vi。 vi是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi。 vi命令繁多但是如果使用灵活之后将会大大提高效率。 vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi)。 在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim。
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自动回到命令模式。
命令 | 说明 |
---|---|
: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 | 跳至文件的底部 |