vi
vi是visual interface的简称,是linux最经典的编辑器
vi的核心设计思想:让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作
vi的特点:
- 没有图形界面的功能强大的编辑器
- 只能是编辑文本内容,不能对字体,段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
基本操作:
打开和新建文件
vi 文件名
注意:如果文件存在,会直接打开文件,如果文件不存在,会先创建这个文件
打开文件并定位行
有时候我们知道文件的编程错误地址,就需要直接定位到指定的行上
vi 文件名 +行数
# 如果不写行数,只写+,则会自动定位到文件末尾
vi异常退出
如果vi异常退出,很可能在磁盘上保留交换文件
当你再次打开文件时,会显示警告信息,此时按下D删除交换文件,则之前的修改全部丢失
vi的三种基本模式
- 命令模式
打开文件首先进入命令模式,是使用vi的入口
在其他编辑器中使用鼠标等的操作,都是在命令模式下完成的 - 末行模式
执行保存,退出等的操作 - 编辑模式
正常的编辑文字
末行模式的命令
w write 保存
q quit 退出,如果没有保存,不允许修改
q! quit 强行退出,不保存修改
wq write&quit 保存并退出
x 保存并退出
命令
行数移动
j 向下移动
k 向上移动
gg go 文件顶部
G go 文件末尾
数字gg 移动到数字对应行数
数字G 移动到数字对应行数
:数字 移动到数字对应行数
屏幕移动
Ctrl+b back 向上翻页
Ctrl+f forword 向下翻页
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕末尾
光标移动
w word 向后移动一个单词
b back 向前移动一个单词
0 行首
^ 行首,第一个不是空白字符的位置
$ 行尾
段落移动和括号切换
vi使用空行来区分段落
在程序开发过程中,通常一段功能相关的代码会写在一起—之间没有空行
{ 上一段
} 下一段
在程序中,括号出现的频率比较高,并且成对出现
% 括号匹配并切换
标记
在开发时,某一块代码可能需要稍后处理
此时,使用m添加一个标记,这样可以在需要时快速的跳转回来
标记名称可以是a-z或者A-Z任意一个字母
添加标记的行如果被删除,则标记同样被删除
如果在其他行,添加了相同的标记,则之前的标记会被替代
m字母 mark 添加标记
‘字母 直接定位到标记的位置
选中文本
v 可视模式 从光标开始正常模式选择文本
V 可视行模式 选中光标经过的完整行
Ctrl+v 可视块模式 垂直方向选中文本
注意:此时可以与上面的移动命令连用
ggVG 可以选中所有文本
ggv} 可以直到选中段落末尾
撤销和恢复命令
u undo 撤销命令
Ctrl+r redo 恢复撤销的命令
删除命令
x cut 删除光标所在字符,或者选中的文本
d(移动命令) delete 删除移动命令对应的内容 例:dw可以删除整个单词
dd delete 删除光标所在行 数字dd可以删除多行
D delete 删除至行尾
复制粘贴
vi中提供一个被复制文本的缓冲区
y(移动命令) copy 复制
yy copy 复制一行,可以nyy复制多行
p paste 粘贴
剪切
在vi中,d,x删除操作就是剪切操作,只不过如果你不粘贴,表面上就是删除
替换
对文件进行小幅度的改变时,可以用到替换命令
r replace 替换当前字符
R replace 替换当前行光标后的字符
缩进
>> 向右增加缩进
<< 向左增加缩进
. 重复上次命令
注意:如果一次性需要给多行增加缩进,V>,执行后,自动回到命令模式
查找
/str 查找指定的内容
n 查找下一个
N 查找上一个
* 向后查找当前光标所在单词
# 向前查找当前光标所在单词
查找并替换
全局替换
:%s/旧文本/新文本/g
可视区域替换(只替换选中的区域)
:s/旧文本/新文本/g
确认替换
:%s/旧文本/新文本/gc
y yes 替换
n no 不替换
a all 替换所有
q quit 退出替换
l last 最后一个,并把光标移动到行首
^E 向下滚屏
^Y 向上滚屏
插入命令
i insert 在当前字符前插入字符
I insert 在当前行首插入字符
a append 在当前字符后插入字符
A append 在当前行尾插入字符
o 在当前行后面插入一个空行
O 在当前行前面插入一个空行
案例总结
1. 重复输入hello world 10次
命令模式下,先输入10,再按i进入编辑模式,输入hello world,按esc退出,vim会自动重复10次
2. 给多行代码添加注释
命令模式下,先输入ctrl+v进入可视块模式,选中代码后,输入I进入编辑模式,输入#,esc退出,vim会自动在选中的代码前添加#
末行模式下命令总结
:e . 打开vim内置的文件管理器,查看当前路径下的文件
:n 文件名 新建文件
:w 文件名 另存为 (保存后,编辑的仍然是当前的文件,不会改为另存为的文件)
注意: 这个另存为之所以不切换文件,是为了让用户进行阶段性保存,且注意力仍然在开发的文件上
分屏命令
:sp 文件名 split 横向增加分屏
:vsp 文件名 vertical split 竖向增加分屏
Ctrl+w 切换窗口