vi:文本编辑器(文本:ASCII,unicode),现在vi命令是以vim运行的
文本编辑类型
行编辑器:sed
全屏编辑器:vim
vim:模式化的编辑
基本模式
编辑模式|命令模式(默认打开后的模式)
输入模式
末行模式
内置的命令行接口
打开文件:
vim [potion]... file...
+#:打开文件后,光标处于第#行的行首
+:打开文件后,光标处于最后一行的行首
+/PATTERN:打开文件后,光标处于第一个被PATTERN匹配行的行首
模式转换
编辑模式-->输入模式
i:在光标所在处前面转换为输入
a:在光标所在处后面转换为输入
o:在光标所在行下方打开一个空行
I:在光标所在行行首输入
A:在光标所在行行尾输入
O:在光标所在行上方打开一个空行
c:
C:
输入模式-->编辑模式
ESC
编辑模式-->末行模式
:
末行模式-->编辑模式
ESC
关闭文件
:q 退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
:w /文件 把文本内容保存到一个文件,文件存在的话需要w!强制覆盖
ZZ:编辑模式下保存退出
光标跳转
字符间跳转
h:向左一个字符
j:向下一个字符
k:向上一个字符
l:向右一个字符
#h:向左#个字符
单词间跳转
w:跳转到下一个单词词首
e:跳转到当前或下一单词的词尾
b:跳转到当前或下一单词的词首
#w:跳转到下#个单词词首
行首行尾跳转
^:跳转到行首的第一个非空白字符
0:跳转到行首
$:跳转到行尾
行间跳转
#G:跳转到第#行
G:跳转到最后一行
gg:第一行
句间移动
)
(
段落间移动
}
{
vim的编辑命令:
字符编辑
x:删除光标处的字符
#x:删除光标处起始的#个字符
xp:删除字符并粘贴,实现光标所在字符跟后面一个字符换位
替换命令
r:替换当前光标所在字符,输入r再输入换成的字符
删除命令
d:可结合光标跳转字符,实现范围删除
d^:删除光标前所有字符
d$:删除光标后所有字符
3dw:光标所在及后面3个单词
dd:删除一行
#dd:删除向下#行
粘贴命令
p:缓冲区存的如果为整行,则粘贴到光标所在行下方;否则则粘贴到光标所在处后面
P:缓冲区存的如果为整行,则粘贴到光标所在行上方;否则则粘贴到光标所在处前面
复制命令
y:复制,可结合光标跳转字符,yy,#yy
改变命令
c:删除并进入输出模式,可结合光标跳转字符,cc,#cc
可视化模式
v:按字符选定
V:按行选定
选中结合d,y使用
撤消此前的编辑
u:撤消此前的操作
#u:撤消此前#次的操作
撤消此前的撤消
ctrl+r
重复前面的操作
.
翻屏操作
ctrl+f:向后翻一屏
ctrl+b:向前翻一屏
ctrl+d:向后翻半屏
ctrl+u:向前翻半屏
vim自带练习教程命令
vimttutor
vim中的末行模式(支持命令历史)
字符范围(地址定界):后面跟编辑命令
:# ;第#行,例:5d,删除第5行
:#,# ;第#到#行
:1,+# ;光标在首行,第一行加后面#行
:. ;当前行
:$ ;最后一行
:.,$-1 ;当前行到倒数第二行
:% ;全文
:/PAT1,/PAT2/ ;从第一次被PAT1匹配到第一次被PAT2匹配的行
:r /文件 ;把文件插入到当前光标下
查找
:/PATTERN ;从当前向下查询整个文件
:?PATTERN ;从当前向上查询整个文件
n:与命令同方向
N:与命令同反方向
查找并替换(必须和地址定界一起使用)
:s/PATTERN/字符/修饰符(s@@@,s###可用其它特殊符号)
前面为要查询的模式
中间为字符、引用\1、&引用前面PATTERN匹配的所有字符(为空表示删除匹配到字符)
修饰符
i:忽略大小写
g:替换所有匹配的字符,默认只替换每行第一个匹配到的字符串
多文件模式
vim file1 file2 file3 ...
:next 下一个
:prev 前一个
:last 最后一个
:wall 保存所有
:qwall 保存退出
多文件多窗口
vim -o|O file1 file2 ...
-o:水平分割
-O:垂直分割
切换窗口:crtl+w然后按上下左右箭头
单文件窗口分割
ctrl+w,s:水平分割
ctrl+w,v:垂直分割
定制vim工作特性
配置文件
全局:/etc/vimrc
个人:~/.vimrc
末行模式:当前vim进程有效
行号
set number,set nu:显示行号
set nonu:取消显示行号
括号匹配(括号高亮显示)
set showmatch,set sm:显示
set nosm:不显示
自动缩进(同上一行缩进)
set ai
set noai
搜索高亮
set hlsearch
set nohlsearch
语法高亮
syntax on
syntax off
忽略字符大小写
set ic
set noic
获取帮助
:help
:help 参数
bash条件测试
文件测试
存在性测试
-a /file:文件是否存在,存在为真
-e /file:文件是否存在,存在为真(一般用-e)
文件类型测试
-b /file:文件是否存在且为块设备文件
-c /file:文件是否存在且为字符设备文件
-d /file:文件是否存在且为目录文件
-f /file:文件是否存在且为文件
-S /file:文件是否存在且为套接字文件
-h|-L /file:文件是否存在且为软链接文件
-p /file:文件是否存在且为命名管道文件
文件权限测试
-r /file:文件是否存在且执行命令用户可读权限
-w /file:文件是否存在且可写权限
-x /file:文件是否存在且有执行权限
文件特殊权限测试
-g /file:文件是否存在且有sgid权限
-u /file:文件是否存在且有suid权限
-k /file:文件是否存在且有sticky权限
文件大小测试
-s /file:文件是否存在且非空
文件打开性测试
-t fd:fd为文件描述符,文件是否打开且与某终端相关
-N file:文件自上一次被读取后是否被修改过(是否有echo写入)
-O file:当前用户是否为文件属主
-G file:当前用户是否为文件属组
文件对比
file1 -ef file2:测试2个文件是否指向同一设备上相同inode
file1 -nt file2:file1是否新于file2
file1 -ot file2:file1是否旧于file2
组合条件测试
逻辑运算
第一种方式
command && command
command || command
! command
第二种方式:以测试表达式方式(test,[ ],[[ ]])
测试表达式 -a 测试表达式:与运算,前面测试是,后面继续测试
测试表达式 -o 测试表达式:或运算,前面测试否,后面继续测试
! 测试表达式:非运算
例:[ -z `hostname` -o `hostname` == "bogon" ] && hostname "vm180" 测试是否有主机名,有的话是否为bogon,是的话改个名
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/passwd
[ ! \( -w /file -o -x /file \) ]:以普通用户测试文件没有写权限再测试没有执行权限则为真