一 vi的操作模式
vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指令模式下,可进行删除、修改等各种编辑动作。
在输入模式下,按Esc键切换到指令模式下。
在指令模式下,按输入指令(i、a、o等)进入输入模式。
二 进入vi
$ vi filename
直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。
如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。
$ view filename
以只读方式打开文件filename
三 指令模式
以下指令集中重要度为“***”的必须掌握的指令,否则无法正常使用vi,重要度为“*”的为建议掌握的指令,可以更方便地使用vi,其它属于技巧级指令,可以不掌握。
3.1 进入输入模式
重要度 | 指令集 | 功能 |
*** | a | 在当前游标之后输入 |
A | 在当前行之末输入 | |
*** | i | 在当前游标之前输入 |
I | 在当前行之首输入 | |
*** | o | 在当前行之下新增一行,并在新增行输入 |
O | 在当前行之上新增一行,并在新增行输入 |
输入结束后,按Esc键退出输入模式。
3.2 游标移动
重要度 | 指令集 | 功能 |
*** | h | 向左移动一个字元 |
*** | l | 向右移动一个字元 |
*** | j | 向下移动一个字元 |
*** | k | 向上移动一个字元 |
* | b | 左移一个单词,至词首 |
* | w | 右移一个单词,至词尾 |
* | 0 | 移到当前行行首 |
* | $ | 移到当前行行尾 |
+ | 移至下一行的行首 | |
- | 移至上一行的行首 | |
H | 移至视窗的第一行 | |
M | 移至视窗的中间一行 | |
L | 移至视窗的最后一行 | |
G | 移至该文件的最后一行 | |
nG | 移至该文档的第n行 | |
n+ | 下移n行 | |
n- | 上移n行 |
3.3 视窗移动
重要度 | 指令集 | 功能 |
*** | <Ctrl> + f | 视窗下卷一页 |
*** | <Ctrl> + b | 视窗上卷一页 |
<Ctrl> + d | 视窗下卷半页 | |
<Ctrl> + u | 视窗上卷半页 | |
* | <Ctrl> + e | 视窗下卷一行 |
* | <Ctrl> + y | 视窗上卷一行 |
3.4 删除操作
重要度 | 指令集 | 功能 |
*** | X | 删除游标所在字元 |
X | 删除游标前一字元 | |
* | Dw | 从游标当前位置开始向后删除一个单词 |
Db | 从游标当前位置开始向前删除一个单词 | |
* | D0 | 从行首删除至当前游标位置 |
* | D$ | 从游标当前位置删除至行尾 |
*** | Dd | 删除游标所在行 |
D | 同d$ |
3.5 修改操作
重要度 | 指令集 | 功能 |
*** | s | 修改游标所在字元,修改完成后按Esc键结束 |
S | 修改整行内容,修改完成后按Esc键结束 | |
* | r | 替换当前游标所在字元 |
* | R | 进入替换状态,直至按Esc键结束 |
* | cw | 修改一个单词(从游标位置至词尾) |
cb | 修改一个单词(从词首至游标位置) | |
* | cc | 修改整行内容,完成后按Esc键结束,同S |
* | c0 | 修改行首至游标位置的内容 |
* | c$ | 修改游标位置至行尾的内容 |
~ | 游标所在字元大小写切换 |
3.6 指令重复
在指令模式中,可在指令前面加入一个数字n,则该指令会重复执行n次。常用的重复操作有:
重要度 | 指令集 | 功能 |
*** | nx | 删除n个字元 |
*** | ndd | 删除n行 |
*** | ns | 修改n个字元 |
3.7 取消前一动作(Undo)
重要度 | 指令集 | 功能 |
*** | u | 撤消上一指令的结果 |
3.8 查找字符串
重要度 | 指令集 | 功能 |
*** | /字符串 | 从当前游标向后查找该字符串 |
*** | ?字符串 | 从当前游标向前查找该字符串 |
*** | n | 从当前游标向后查找下一个字符串 |
*** | N | 从当前游标向前查找下一个字符串 |
3.9 查看编辑状况
重要度 | 指令集 | 功能 |
*** | <Ctrl> + g | 显示正在编辑的文件名、当前游标所在行数、文件总行数、文件是否被修改 |
3.10 括号匹配
重要度 | 指令集 | 功能 |
* | % | 定位到匹配的“(”、“)”、“{”、“}” |
四 保存与退出
重要度 | 指令集 | 功能 |
*** | :w | 保存,但不退出 |
*** | :wq | 保存并退出 |
:x | 同:wq | |
*** | :q | 退出,如果当前文件没有保存,禁止退出 |
*** | :q! | 不保存退出 |
:w file1 | 将内容保存至文件file1中,注意:此时编辑的仍为原文件 | |
:w! file1 | 将内容覆盖保存至文件file1中,如文件file1存在,:w file1将禁止执行 |
五 环境设置
重要度 | 指令集 | 功能 |
:set | 显示已设置的环境状况 | |
:set all | 显示所有的环境设置选项 | |
* | :set nu | 显示行号 |
* | :set nonu | 不显示行号 |
* | :set ts=n | 设置Tab键的长度为n |
注:vi环境设置的缺省值可在$HOME/.exrc文件中设置。
六 执行指令
以下用具体的数字为例进行介绍,数字表示行数,游标所在行可用“.”代替,文件最后一行可用“$”代替。
重要度 | 指令集 | 功能 |
* | :10,20d | 删除第10行至第20行的内容 |
:10d | 删除第10行的内容 | |
:%d | 删除全部内容 | |
* | :10,20co30 | 将第10行至第20行的内容复制到第30行之后 |
* | :10,20mo30 | 将第10行至第20行的内容移动到第30行之后 |
:1,$s/old/new | 将第1行至最后一行中的old替换成new | |
:1,$s/^/new | 将第1行至最后一行的内容前面插入new | |
* | :10 | 将游标移至第10行 |
七 重复指令
重要度 | 指令集 | 功能 |
* | . | 重复上一条指令 |
八 切换到shell状态
重要度 | 指令集 | 功能 |
*** | :sh | 切换到shell状态,exit返回 |
本文由傻鸟发布,不代表傻鸟立场,转载联系作者并注明出处:https://shaniao.net/linux/155.html