三种工作模式
-
命令模式
vi的入口;
对文件进行常规操作,比如定位、翻页、复制、粘贴、删除……
-
末行模式
vi的出口;
执行保存、退出等操作
-
编辑模式
编辑内容
移动命令
-
行数移动
命令 英文 功能 gg go 文件顶部 G go 文件末尾 数字gg go 移动到数字对应行数 数字G go 移动到数字对应行数 :数字 移动到数字对应行数 -
屏幕移动
命令 英文 --- Ctrl + b back 向上翻页 Ctrl + f forward 向下翻页 H Head 屏幕顶部 M Middle 屏幕中间 L Low 屏幕底部段落移动 -
段落移动
命令 功能 { 上一段 } 下一段 -
括号切换
--- 功能 % 括号匹配及切换
分屏命令
###末行命令
| 命令 | 英文 | 功能 |
|---|---|---|
| :w | write | 保存 |
| :q | quit | 退出,如果没有保存,不允许退出 |
| :q! | quit | 强行退出,不保存退出 |
| :wq | write & quit | 保存并退出 |
| :x | 保存并退出 | |
| :%s///gc | 确认搜索并替换 |
末行命令扩展
| 命令 | --- | 功能 |
|---|---|---|
| :e . | edit | 会打开内置的文件浏览器,浏览当前目录下的文件 |
| :n 文件名 | new | 新建文件 |
| :w 文件名 | write | 另存为,但是仍然要编辑文件,并不会切换文件 |
##删除文本
| --- | --- | --- |
|---|---|---|
| x | cut | 删除光标所在的字符,或者选中文字 |
| d(移动命令) | delete | 删除移动命令对应的内容 |
| dd | delete | 删除光标所在行,可以ndd删除多行 |
| D | delete | 删除至行末尾 |
删除命令和移动命令组合
| 命令 | 功能 |
|---|---|
| dw | 从光标位置删除到单词末尾 |
| d0 | 从光标位置删除到一行的起始位置 |
| d} | 从光标位置删除到段落结尾 |
| ndd | 从光标位置向下连续删除 n 行 |
| d代码行G | 从光标所在行 删除到 指定代码行 之间的所有代码 |
| d'a | 从光标所在行 删除到 标记a 之间的所有代码 |
替换
| 命令 | --- | --- | --- |
|---|---|---|---|
| r | replace | 替换当前字符 | 命令模式 |
| R | replace | 替换当前行光标后的字符 | 替换模式 |
- R命令可以进入__替换模式__,替换完成后,按ESC回到命令模式
- 替换命令 的作用就是不用进入__编辑模式__,对文件进行轻量级的修改
查找和替换
查找和替换命令需要在末行模式下执行
格式如下
:%s///g
-
全局替换
:%s/旧文本/新文本/g
-
可视区域替换
先选中文本
:s/旧文本/新文本/g
-
确认替换
:%s/旧文本/新文本/gc
末尾的g换成gc以后,在替换的时候,会有提示
| --- | --- | | :---- ]:| :----------------------------: | | y | yes 替换 | | n | no 不替换 | | a | all 替换所有 | | q | quit 退出替换 | | l | 最后一个,并把光标移动到行首 | | ^E | 向下滚屏 | | ^Y | 向上滚屏 |
缩排和重复执行
| --- | 功能 |
|---|---|
| >> | 向右增加缩进 |
| << | 向左减少缩进 |
| . | 重复上次命令 |
- 缩排命令 在开发程序时,统一增加代码的缩进 比较有用
- 在可视模式下,缩排命令只需要使用一个 > 或者 <
标记
| --- | --- | --- |
|---|---|---|
| mx | mark | 添加标记x,x是a-z或者A-Z之间的任意一个字母 |
| 'x | 直接定位到标记x所在位置 |
###选中文本(可视模式)
| --- | 模式 | --- |
|---|---|---|
| v | 可视模式 | 从光标位置开始按照正常模式选择文本 |
| V | 可视行模式 | 选中光标经过的完整行 |
| Ctrl + v | 可视块模式 | 垂直方向选中文本 |
可视模式 下,可以和__移动命令__ 连用,例如:ggVG能够选中所有内容
撤销和恢复撤销
| --- | --- | --- |
|---|---|---|
| u | undo | 撤销上次命令 |
| Ctrl + r | redo | 恢复撤销的命令 |
复制、粘贴
| --- | --- | --- |
|---|---|---|
| y(移动命令) | copy | 复制 |
| yy | copy | 复制一行,可以nyy复制多行 |
| p | paste | 粘贴 |
vi中提供有一个 被复制文本的缓冲区
- 复制命令会将选中的文字保存在缓冲区
- 删除命令删除的文字会被保存在缓冲区
- 在需要的位置,使用粘贴命令可以将缓冲区的文字插入到光标所在位置
- vi中的文本缓冲区只有一个,后续复制、剪切操作,会覆盖之前的内容
注意
- vi中的文本缓冲区和系统的剪贴板不是同一个,所以在其他软件中使用Ctrl + C复制的内容,不能再vi中通过p命令粘贴
- 可以在编辑模式下使用鼠标右键粘贴