vi/vim
模式
命令模式
编辑模式
末行模式
home键 行首
end键 行尾
命令模式切换到编辑模式
a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入
s 删除当前字符后输入
S 删除当前行后输入
u 撤销一步操作
ctrl+r 重做
yy 复制 p 粘贴(当前行下一行) P(当前行上一行)
100yy 复制100行
dd 剪切/删除
100dd 删除100行
^ 行首
$ 行尾
y^ 复制当前字符到行首(不包含当前字符)
d^ 删除当前字符到行首
y$ 复制当前字符到行尾 (包含当前字符)
d$ 删除当前字符到行尾
G 最后一行
gg 第一行
53G
ygg 复制当前行到首行
dgg 删除当前行到首行
yG 复制当前行到尾行
dG 删除当前行到尾行
末行模式 (shift+:)
:w
:w!
:wq
:wq!
:q
:q!
:e /root/aa.txt
:w /tmp/xx.txt
:2,5w /tmp/yy.txt
:e! 重新打开当前文件
功能设置
:set nu
:set nonu
:set list
:set nolist
制表符 8个空格
:set tabstop=16 全文件 制表符=16个空格长度
:set softtabstop=16 已有行制表符长度不变 新的行长度=16
设置自动缩进
:set autoindent
:set noautoindent
设置永久生效
配置文件: /etc/vimrc
查找
/ab n 下一个 N 上一个
?a
替换
😒/ab/XX/ 光标所在行 匹配到的第一个ab
:%s/ab/XX/g 所有行所有ab都替换 -g 全局 % 所有行
:2,5s/ab/XX/g 2-5行替换
:%s/ab/XX/gc c 交互式替换
:%s/ //g 替换掉所有的空格
:%s/^ *//g 替换掉所有开头的空格
:g/^$/d 删除空行
:g/^#/d 删除所有#号开头的行
可视化模式
v
选中
y 复制 d删除
可视化块模式
ctrl + v
选中
y复制 d删除
ctrl+v ---> 选中注释列--->shift+i---->输入#---->ESC(两次)
多文件处理
[root@localhost ~]# vim aa.txt cc.txt tt.txt
:next 下一个文件
:prev 上一个
:first 第一个
:last 最后一个
ctrl+^ 两个文件之间切换(当前和 上次打开的)
多窗口
[root@localhost ~]# vimdiff aa.txt cc.txt tt.txt
ctrl+ w w 切换文件
退出 wqa qa!
[root@localhost ~]# vim -O aa.txt cc.txt tt.txt
[root@localhost ~]# vim -o aa.txt cc.txt tt.txt
加密
末行模式 X 保存退出
总结问题:
出现问题原因:
没有正常退出vim 在cache 找到 vim 搜索.swap 删除即可,这是在非正常退出留下的副本,如果在编辑的时候出问题导致编辑进度丢失可以用这个备份的文件恢复编辑进度
解决方法:
1.通过D命令删除交换文件
2.rm -rf .tt.txt.swp