vi-学习笔记整理
vi 简介
vi 是一款无图形界面的环境下的编辑工具
vi 的特点:
没有图形界面 的 功能强大 的编辑器
只能是编辑 文本内容,不能对字体、段落进行排版
不支持鼠标操作
没有菜单
只有命令
vi 和 vim
在很多 Linux 发行版中,直接把 vi 做成 vim 的软连接
vi
vi 是 Visual interface 的简称,是 Linux 中 最经典 的文本编辑器
vi 的核心设计思想 —— 让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作
vim = vi improved vim可以看做vi的升级版
vim 安装
安装参考
打开和新建文件
在终端中输入 vi/vim+文件名
如果文件已经存在,会直接打开该文件
如果文件不存在,会新建一个文件
退出vi
Esc退出编辑模式后,shitf+; 键
输入 q 表示不保存退出vi
输入 :wq/:x 保存后退出
打开文件并且定位行
vi /vim 文件名 +行数 (注意空格位置)
提示:如果只带上 + 而不指定行号,会直接定位到文件末尾;如果不跟+,会定位到文件首行
vi异常处理
如果 vi 异常退出,在目录下方会产生一个 .swp的隐藏文件,为交换文件,下次再使用 vi 编辑该文件时,会看到以下屏幕信息,按下字母 d 可以 删除交换文件即可
vi三种工作模式及常用命令
-
命令模式
打开文件首先进入命令模式,是使用 vi 的 入口
通过 命令 对文件进行常规的编辑操作,例如:定位、翻页、复制、粘贴、删除……
在其他图形编辑器下,通过 快捷键 或者 鼠标 实现的操作,都在 命令模式 下实现 -
末行模式 —— 执行 保存、退出 等操作
要退出 vi 返回到控制台,需要在末行模式下输入命令
末行模式 是 vi 的 出口 -
编辑模式 —— 正常的编辑文字
末行模式命令
- w 保存
- q 退出,如果没有保存,不允许退出
- q! 强行退出,不保存退出
- wq 保存并退出
- x 保存并退出
命令模式命令
提示:在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令 重复执行指定次数
移动光标
- h 向左
- j 向下
- k 向上
- l 向右
行内移动
- w 向后移动一个单词
- b 向前移动一个单词
- 0 行首
- ^ 行首,第一个不是空白字符的位置
- $ 行尾
行数移动
- gg 文件顶部
- G(shitf+g) 文件末尾
- 数字gg 移动到 数字 对应行数
- 数字G 移动到 数字 对应行数
- :数字(shit+;为:) 移动到 数字 对应行数
屏幕移动
- Ctrl + b 向上翻页
- Ctrl + f 向下翻页
- H 屏幕顶部
- M 屏幕中间
- L 屏幕底部
段落移动
vi 中使用 空行 来区分段落
- { 上一段
- } 下一段
括号切换 - % 括号匹配及切换
选择文本
vi 中要选择文本,首先要使用命令切换到可视模式,vi中可视模式一共有三种
然后按下↑↓←→方向键来选中需要复制的区域
-
v 可视模式 从光标位置开始按照正常模式选择文本
-
V 可视行模式 选中光标经过的完整行
-
Ctrl + v 可视块模式 垂直方向选中文本
撤销和恢复撤销 -
u 撤销上次命令
-
CTRL + r 恢复撤销的命令
删除
- x 删除光标所在字符,或者选中文字
- d(移动命令) 删除移动命令对应的内容
- dd 删除光标所在行,可以 数字+dd 删除多行
- D 删除至行尾
- dw 删除一个单词
- dG 删除至行的内容
- d0 从光标位置删除到一行的起始位置
- d} 从光标位置删除到段落结尾
复制、粘贴
- y(移动命令) 复制当前光标选中内容
- yy 复制一行,可以 nyy 复制多行
- p 粘贴
命令 d、x类似于 CTRL + X 剪切操作
命令 y类似于 CTRL + C 复制操作
命令 p类似于CTRL + V 粘贴操作
vi 中提供有一个 被复制文本的缓冲区
复制和删除 命令都会将选中的文字保存在缓冲区
使用 粘贴 命令可以将缓冲区的文字插入到光标所在位置
vi 中的 文本缓冲区同样只有一个,如果后续做过 复制、剪切 操作,之前缓冲区中的内容会被替换,但缓冲区和系统的剪切板并不是同一个,因此不能使用CTRL+V 来将系统中通过CTRL+C的内容粘贴到vi中,但是可以通过鼠标右键在编辑模式下粘贴
替换
需在命令模型下,替换完成后,按下 ESC 可以回到 命令模式
- r 替换当前字符
- R 替换当前行光标后的字符
缩排和重复执行
- >> 向右增加缩进(缩进一次性4个空格大小)
- << 向左减少缩进
- . 重复上次命令
查找字符串
- /str 查找 str
查找到指定内容之后
- n: 查找下一个
- N: 查找上一个
- 查找一个文件中不存在,取消高亮显示
匹配字符串
- * 向后查找当前光标所在单词
- # 向前查找当前光标所在单词
查找并替换
需在末行模式下
全局替换
- :%s/旧文本/新文本/g,替换区分大小写
可视区域替换
- 先在可视模式下,选取要替换的内容
- 然后通过 : s/旧文本/新文本/g,替换区分大小写
- 注意:可视模式区域替换不同于全局替换,前面无%
如果在使用查找替换命令时候,希望出现提示信息,可以将末尾的 g 改成 gc 在替换的时候,即
- :%s/旧文本/新文本/gc
- y - yes 替换
- n - no 不替换
- a - all 替换所有
- q - quit 退出替换
- l - last 最后一个,并把光标移动到行首
- ^E 向下滚屏
- ^Y 向上滚屏
插入命令
-
i 在当前字符前插入文本
-
I 在行首插入文本
-
a 在当前字符后添加文本
-
A 在行末添加文本
-
o 在当前行后面插入一空行
-
O 在当前行前面插入一空行
案例:多行代码增加注释 -
移动到要添加注释的 代码的第 1 行,按 ^ 定位到该行行首
-
按 CTRL + v 进入 可视块 模式
-
向下选中要添加的代码行
-
输入 I 进入 编辑模式,并在 行首插入
-
输入 # 也就是注释符号
-
按下 ESC 返回到 命令式
切换文件和新建文件
需在末行模式下
- :e . 会打开内置的文件浏览器,浏览要当前目录下的文件
- :n 文件名 新建文件
- :w 文件名 另存为,但是仍然编辑当前文件,并不会切换文件
分屏
- :sp [文件名] 横向增加分屏
- :vsp [文件名] 纵向增加分屏
分屏窗口快捷键命令都是基于 CTRL + W ,使用方式为 CTRL + W +命令 - CTRL + W + w 切换到下一个窗口
- CTRL + W + r 互换窗口
- CTRL + W+ c 关闭当前窗口,但是不能关闭最后一个窗口
- CTRL + W + q 退出当前窗口,如果是最后一个窗口,则关闭 vi
- CTRL + W + o 关闭其他窗口
- CTRL + W + + 增加窗口高度
- CTRL + W + - 减少窗口高度
- CTRL + W + > 增加窗口宽度
- CTRL + W + < 减少窗口宽度- CTRL + W + = 等分窗口大小