vi 打开文件
-
vi 文件名 :打开或编辑文件
-
vi 文件名 +行 :打开文件并把光标定位到指定行(vi 文件名 + :光标定位到文件末尾)
-
vi异常退出,vi打开后输入d删除交换文件
-
vi的三种工作模式
-
命令模式
- 打开文件就进入命令模式
- 通过命令对文件进行常规的编辑操作,例如:定位、翻页、复制、黏贴、删除...
- 在其他图形编辑器下,通过快捷键或者鼠标实现操作,都在命令模式下实现
-
末行模式——执行保存、退出等操作
- 要退出vi返回到控制台,需要在末行模式下输入命令
- 末行模式是vi的出口
w write 保存 q quit 退出,如果没有保存,不允许退出 q! quit 强行退出,不保存退出 wq write&quit 保存并退出 x 保存并退出
-
编辑模式——正常的编辑文字
-
-
模式切换
- vi打开文件:命令模式
- i(insert):进入到编辑模式
- ESC:返回命令模式
- :(冒号):进入末行模式
- ESC:返回命令模式
- wq(write&quit):保存并返回控制台
- vi打开文件:命令模式
命令线路图
重复次数
- 在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数
移动和选择(多练)
vi之所以快,关键在于能够快速定位到要编辑的代码行
- 移动命令能够和编辑操作命令组合使用
- 左:h、下:j、上l:k、右:l
- 行内移动
命令 英文 功能 w word 向后移动一个单词 b back 向前移动一个单词 0 行首 ^ 行首,第一个不是空白字符的位置 $ 行尾
- 行数移动
命令 英文 功能 gg go 文件顶部 G go 文件尾部 数字gg go 移动到数字对应的行数 数字G go 移动到数字对应的行数 :数字
- 屏幕移动
命令 英文 功能 Ctrl + b back 向上翻页 Ctrl + f forward 向下翻页 H Head 屏幕顶部 M Middle 屏幕中间 L Low 屏幕底部
- 移动(程序)
- 段落移动
vi中使用空行来区分段落 在程序开发时,通常一段功能相关的代码会写在一起——之间没有空行 命令 功能 { 上一段 } 下一段
- 括号切换
在程序中,()、[]、{ }使用的频率很高,而且都是成对出现(在括号间按%,可以移动到括号的首/尾) 命令 功能 % 括号匹配及切换
- 标记
在开发时,莫一块代码可能需要稍后处理,例如:编辑、查看 此时先使用m增加一个标记,这样可以在需要时快速滴跳转回来或者执行其他编辑操作 标记名称可以是a~z或者A~Z之间的任意一个字母 增加了标记的行如果被删除,标记同时被删除 如果在其他行添加了相同名称的标记,之前添加的标记也会被替换掉 命令 英文 功能 mx mark 添加标记x,x是a-z或者A-Z之间的任意一个字母 'x 直接定位到标记x所在的位置
- 段落移动
- 选中文本(可视模式)
学习“复制”命令前,应该先学会怎么样选中要复制的代码 在vi中要选择文本,需要先使用Visual命令切换到可视模式 vi中提供了三种可视模式,可以方便程序员选择选中文本的方式 按ESC可以放弃选中,返回到命令模式 命令 模式 功能 v 可视模式 从光标位置开始按照正常模式选择文本 V 可视行模式 选中光标经过的完整行 Ctrl + v 可视块模式 垂直方向选中文本 可视模式下,可以和移动命令连用,例如:ggVG能够选中所用内容
编辑操作
- 删除、复制、粘贴、替换、缩排
- 删除文本
如果使用可视模式已经选中了一段文本,那么无论使用d还是x,都可以删除选中文本 命令 英文 功能 x cut 删除光标所在字符,或者选中文字 d(移动命令) delete 删除移动命令对应的内容 dd delete 删除光标所在行,可以ndd删除多行 D delete 删除至行尾 删除命令和移动命令组合示例 dw #从光标位置删除到单词末尾 d0 #从光标位置删除到一行的起始位置 d} #从光标位置删除到段落结尾 ndd #从光标位置向下连续删除n行 d代码行G #从光标所在的行删除到指定代码行之间的所有代码 d'a #从光标所在的行删除到标记a之间的所有代码
- 复制,粘贴
命令 英文 功能 y(移动命令) copy 复制 yy copy 复制一行,可以nyy复制多行 p paste 粘贴 ps:命令d、x类似于图形界面的剪切操作 Ctrl + x 命令y类似于图形界面的复制操作 Ctrl + c 命令p类似于图形界面的粘贴操作 Ctrl + v vi中的文本缓冲区同样只有一个,如果后续做过复制、剪切操作,之前缓冲区中的内容会被替换 vi中的文本缓冲区和系统的剪贴板不是同一个 所以在其他软件中使用Ctrl + c复制的内容,不能在vi中通过p命令粘贴 可以在编辑模式下使用鼠标右键粘贴
- 替换
替换命令的作用就是不进入编辑模式,对文件进行轻量级的修改 命令 英文 功能 工作模式 r replace 替换当前字符 命令模式 R replace 替换当前行光标后的字符 替换模式 R命令可以进入替换模式,替换完成后,按下Esc可以回到命令模式
- 缩排和重复执行
命令 功能 >> 向右增加缩进 << 向左减少缩进 . 重复上次命令 缩排命令在开发程序时,统一增加代码的缩进比较有用 一次性在选中代码前增加4个空格,就叫做增加缩进 一次性在选中代码前删除4个空格,就叫做减少缩进 在可视模式下,缩排命令只需要一个>或者< 在程序中,缩进通常用来表示代码的归属关系 前面空格越少,代码的级别越高 前面空格越多,代码的级别越低
- 删除文本
撤销和恢复
- 撤销和恢复撤销
命令 英文 功能 u undo 撤销上次命令 Ctrl + r redo 恢复上次撤销命令
查找替换
- 常规查找
命令 功能 /str 查找str n:向下查找 N:向上查找 如果看不到高亮就是文件不存在查找内容
- 单词快速匹配
命令 功能 * 向下查找当前光标所在单词 # 向上查找当前光标所在单词
- 查找并替换
- 在vi中查找和替换命了需要在末行模式下执行
- 命令格式(:%s///g)
1)全局替换 一次性替换文件中的所有旧文本 :%s/旧文本/新文本/g 2)可视区域替换 选中要替换文字的范围 :s/旧文本/新文本/g 3)确认替换 如果把末尾的g改成gc在替换的时候会有提示!(推荐使用) :s%/旧文本/新文本/gc y - yes 替换 n - no 不替换 a - all 替换所有 q - quit 退出替换 l - last 最后一个,并把光标移动到行首 ^E 向下滚屏 ^Y 向上滚屏
编辑
- 插入命令
命令 英文 功能 常用 i insert 在当前字符前插入文本 常用 I insert 在行首插入文本 较常用 a append 在当前字符后添加文本 A append 在末行添加文本 较常用 o 在当前行后面插入一空行 常用 O 在当前行前面插入一空行 常用