vi 与 vim区别:
- vim有语法着色
- vim可以记录上次退出的时候的所在位置(打开文件后自动进入到上次所在的行) vi打开文件进入到第一行
一、vi是模式化的工具
vi打开文件后有三种工作模式:
编辑模式: 只能看,不能输入内容
输入模式: 可以在文件中输入或者删除内容
末行模式: 可以执行一些命令操作
注意:打开文件之后,默认就是编辑模式
二、开始输入
i: 在光标之前插入内容
I: 将光标定位到行首,在行首之前插入数据
a: 在光标之后的位置写入内容
A: 将光标定位到行尾,在行尾之后写入新内容
o: 在光标所在行的下一行新开一行
0: 在光标所在行的上一行新开一行
三、常规操作
1.打开文件
vi file: 打开文件,同时将光标定位到首行的首部
vi +n file: 打开文件,同时将光标定位到指定的行的首部
vi + file: 打开文件,同时将光标定位到末行的首部
2.关闭文件
编辑模式下关闭方式
保存关闭: shift+zz(快捷键)末行模式下的关闭方式
q 退出文件–仅仅能退出没有修改过的文件
q! 不保存强制退出–如果文件修改过,而且没有保存(不想保存),必须用 q!
w 保存文件–原地保存
w /path/to/file 实现另存为的效果
wq 保存并退出
3.移动光标–编辑模式
n[h] 左
n[j] 下
n[k] 上
n[l] 右
n[w]: 移动到下个单词的首部
n[b]: 移动到上个单词的首部
n代表移动的倍数
4.行内跳转–编辑模式
0: 跳转到绝对行首(会跳转到空格前)
^: 跳转到相对行首(会跳转到行前面的第一个非空字符上)
$: 跳转到行尾(绝对行尾)
5.行间跳转–编辑模式
n[G]: 跳转到第N行
G 直接跳转都最后一行
6.行间跳转–末行模式
在末行模式输入数字可以跳转到第N行 :1跳转至第1行,:$至最后一行
7.翻屏操作–编辑模式
ctrl+f: 下翻一屏
ctrl+b: 上翻一屏
ctrl+d: 下翻0.5屏
ctrl+u: 上翻0.5屏
8.删除字符–编辑模式
[n]x: 删除指定个数的字符
9.删除模式–编辑模式
进入删除模式: d
删除模式的操作
d$: 删除光标到行尾的内容
D: 同上
d0: 删除光标到行首的内容
dG: 删除光标所在行和后面的全部的行
10.粘贴–编辑模式
p: 粘贴到光标所在行的下一行
P: 粘贴到光标所在行的上一行
11.复制–编辑模式
[n]yy
12.替换
R: 进入替换模式,再次按esc退出替换模式,返回到编辑模式
r: 替换一个字符以后退出替换模式,返回到编辑模式
13.撤销操作
[n]u: 撤销操作【最大撤销之前的50次操作】
ctrl+r: 撤销撤销的操作(等同于windows中的ctrl+y)
14.重复之前的操作
.
15.查找模式
/ 进入查找模式,在此模式按exc可以返回到编辑模式
/string: 在文件中查找指定的字符串
n: 向下查找
N: 反向查找
16.查找替换–末行模式
: start,end s/查找的字符/替换的字符/修饰符修饰符
g: 全局替换【默认只替换每行的第一个】注意:
替换格式中分隔符不一定是 /,可是任意的三个相同的字符例如: s###g s$$$g
例子:将149-159之间的file替换成zxhk
:149,159 s/file/zxhk/g
例子:将整个文件中的file替换成zxhk
: 1, $ s/file/zxhk/g
or : % s/file/zxhk/g【%表示全文件检索】I
例子:在140-150行的首部加上一个#
: 140,150 s/^/#/g
例子:在140-150行的行尾加上一个#
: 140,150 s/$/#/g
例子:在140-150行的首部#去掉
: 140,150 s/^#//g
17.打开多个文件
vim file1 file2
: next >>>显示下一个文件
: prev >>>显示上一个文件
:qa >>>同时退出多个文件
:first >>>回到第一个文件
:last >>>回到最后一个文件
18.分屏显示两个文件
vim -o file1 file2: 上下分屏
vim -O file1 file2: 左右分屏
ctrl+w: 在两个窗口之间进行切换
19.从一个文件读取内容–末行模式
:r /path/to/file
20.在vi中执行bash命令–末行模式
: ! COMMAND(你想执行的命令)
例子:将命令的执行结果保存到vi所打开的那个文件中 :r ! date
21.末行模式下的特殊操作
set nu: 显示行号
set nonu: 取消行号
nohl: 取消高亮
set tabstop=4: 设置tab缩进4个字符
start,stop co dest: 将制定范围内的内容复制到指定dest行的下一行
例子: 3,5 co 9 将第三行到第五行之间的内容复制到第九行的下面
start,stop d 将制定范围内的内容删除
例子: 3,5 d 将第三行到第五行之间的内容删除
start,stop m dest 将指定范围内的内容移动到指定dest行的下一行
例子: 3,9 m 2 将第三行到第九行之间的内容移动到第2行的下