vim:全屏编辑器,模式化编辑器
vim模式:编辑模式(命令模式) 输入模式 末行模式
模式转换:
编辑--输入:i 在当前光标所在字符的前面转为输入模式。 a 在当前光标所在字符的后面转为输入模式。 o 在当前光标所在行的下方,新建一行并转为输入模式。 I 在当前光标所在行的行首转为输入模式。 A 在当前光标所在行的行尾转为输入模式。 O 在当前光标所在行的上方,新建一行并转为输入模式。
输入--编辑:ESC
编辑--末行:(只能从编辑模式转换到末行模式) :冒号
末行--编辑:ESC
一.打开文件
vim +(数字) file :打开文件直接让光标在多少行 +若不接数字,则默认为尾行 vim +/pattern file :打开文件定位至第一次被pattern匹配到的行的行首
二.关闭文件
1.末行模式关闭文件:w 保存 w!强行保存 q 退出 wq 保存并退出 q! 强制不保存退出
2.编辑模式下退出:ZZ 保存退出
三.移动光标(编辑模式)
1.逐字符移动:h 左 l 右 j 上 k 下 (#h:移动#个字符)
2.以单词为单位移动:w 移至下一个单词的词首 e 移至当前单词的词尾 b 移至当前单词的词首 (#w:移动#个单词)
3.行内跳转:0 绝对行首 ^ 行首的第一个非空白字符 $ 绝对行尾
4.行间跳转:G 最后一行 g 行首 (末行模式:行号 回车 ,#G 跳转至第#行)
四.翻屏
ctrl + f 向下翻一屏 ctrl + b 向上翻一屏 ctrl + d 向下翻半屏 ctrl + u 向上翻半屏
五.删除单个字符
x 删除光标所在处的单个字符 #x 删除光标所在处及向后共#个字符
六.删除命令
#d 跳转符 #dw #de #db dd 删除当前光标所在行 #dd 删除包括当前光标所在行内的#行 在末行模式中 start,endd(3,4d)回车删除3行和4行 . 表示当前行 $ 表示最后一行 +# 表示向下的#行 $-1 表示倒数第一行
七.粘贴命令
p (小写)如果删除的或复制的是整行内容,则粘贴至光标所在行的下方.如果删除的或复制的内容为非整行,则粘贴至光标所在字符的后面 P (大写)如果删除的或复制的是整行内容,则粘贴至光标所在行的上方.如果删除的或复制的内容为非整行,则粘贴至光标所在字符的前面
八.复制命令
(y用法同d 命令) #yw #ye #yb yy #yy
九.修改命令
(c用法同d命令) #cw #ce #cb cc #cc
十.替换
r 只能替换单个字符 R 替换模式
十一.撤消
u 撤消前一次的编辑操作,连续u命令可撤消此前的最多50次操作 (也可以用#u) ctrl + r 还原撤消的最近一次撤消
十二.重复前一次编辑操作 '.'
十三.可视化模式
v 按字符选取 V 按矩形块选取
十四.查找
/pattern ?pattern n 下一个 N 上一个 (支持正则表达式)
十五. 查找并替换
在末行模式下使用s命令 s#pattern#string#g/i 指定行查找替换 r1,r2 s#pattern#string#g/i % 表示全文
十六.如何使用vim编辑多个文件
vim file1 file2 默认显示第一个文件 末行模式:next 切换下一个文件 prev 回到上一个文件(回到之前需要保存修改) last 切换到最后一个文件 first 切换到第一个文件 qa 全部退出
十七.分屏显示一个文件
ctrl + w s 水平拆分窗口 ctrl + w v 垂直拆分窗口 ctrl + w 上/下切换窗口 q 退出 qa全部退出
十八.多窗口显示多个文件
vim -o file1 file2 水平显示 vim -O file1 file2 垂直显示
十九.将当前文件中部分内容另存为另外一个文件
末行模式中 r1,r2 w 路径文件名
二十.将另外一个文件内容填充在当前文件中
r 路径文件名 填充到光标行的下一行
二十一.跟shell交互
! commad 回车 回车(退出)
二十二.vim设定
1.显示或取消显示行号 set nu(显示) set nonu(不显示)
2.忽略或区分字符大小写 set ic(忽略) set noic(不忽略)
3.设定自动缩进 set ai set noai
4.高亮显示匹配到的文本 sed hlsearch sed nohlsearch
5.语法高亮 syntax on syntax off
二十三.配置文件
/etc/vimrc :全部用户生效
~/.vimrc :只对当前用户生效
(注:非法退出vim时出错 :vim -r 打开文件正确保存后 再删除 该文件以 .swp结尾的文件)
测试:
整数测试:-le -ge -lt -gt -eq -ne
字符测试:== != > < -n -z
文件测试:-e -f -d -r -w -x
组合测试:-a 与关系 -o 或关系 !非关系 若:[! \(** -o **\)]==! ** -a ! **
文件查找:
locate 非实时,模糊查找是根据全系统问家数据库进行的,速度快(若没有数据库,则可以手动生成文件数据库,时间长 updatedb)
find:find 查找路径 查找标准 查找到以后的处理动作
实时查找,精确,速度慢(遍历指定目录中的所有文件完成查找,支持很多查找标准)
查找路径:默认为当前目录
查找标准:默认为指定路径的所有文件
处理动作:默认为显示打印
匹配标准:-name ”filename“ 对文件名作精确匹配(文件名同配:* ? []) -iname ”不区分大小写“ -regex pattern 基于正则表达式进行的文件名匹配 -user username 根据属主查找 -group groupname 根据属组进行文件名匹配 -uid uid:根据uid进行查找 -gid gid:根据gid进行查找 -nouser 查找没有属主的文件 -nogroup 查找没有属组的文件 -size(+/- #K #M #G 默认为字节 #(数字) ) 根据文件大小进行查找 -type #(d f c b l p s) 根据文件类型进行查找 -mtime -ctime -atime :根据以天为单位进行查找文件的时间戳(+/-)(-mmin ...以分钟为单位...) -perm -/mode 以文件权限查找 -文件权限能完全包含此mode时才能被匹配 / 9位中任意一位被匹配都行
组合条件:-a 与 -o 或 -not 非
处理动作:默认为 -print :打印显示 -ls :类似-ls -l 的形式显示每一个文件的详细内容 , -ok commad \;每一个操作都需要用户的确认 -exec commad {}(引用找到的文件) 不需要用户确认 (例:find ./ -perm -001 -exec mv {} {}.new\;)
特殊权限:
SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者的
SGID:运行某程序时,相应进程的属组是程序文件自身的所属基本组 ,而不是启动者的
sticky:在一个公共目录,每个用户都可以创建文件,但只能删除自己创建的文件
chmod u+s,g+s,o+t file 若file文件原有x权限,最后一位显示为s否则显示为S
转载于:https://blog.51cto.com/benniaoxianhui/1679202