文章目录 1. 命令的执行过程 2. vi/vim介绍 3. 命令模式 4. 编辑模式 5. 底行模式 6. 视图模式 7. vim的变量 8.vim文件比对
文章目录
- 1. 命令的执行过程
- 2. vi/vim介绍
- 3. 命令模式
- 4. 编辑模式
- 5. 底行模式
- 6. 视图模式
- 7. vim的变量
- 8.vim文件比对
- 9.vim打开多个文件
- 10. vim执行过程
- 11.vim故障
1. 命令的执行过程
1. 系统会判断你输入的命令是否绝对路径,是直接执行
2. 如果是相对路径,系统会判断命令是否存在别名,如果存在,执行别名
3. 如果命令不存在别名,系统会判断输入的命令是否内置命令,如果是,直接执行
4. 如果不是内置命令,系统会查询内存的hash缓存表,如果命令存在缓存,则按照缓存执行
5. 如果hash缓存表中没有命令的缓存,系统会从环境变量PATH中的命令路径查询命令的路径进行执行
6. 如果PATH变量没有命令的路径,就会报错 command not found
#查询命令是否为内置命令
[root@qls ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@qls ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
#查看系统中所有的内置命令
[root@qls ~]# help
#查看当前窗口下所有外部命令的缓存表
[root@qls ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
6 /usr/bin/file
[root@qls ~]# /usr/bin/wc /etc/hosts
2 10 158 /etc/hosts
[root@qls ~]# ll /usr/bin/wc
-rwxr-xr-x. 1 root root 41688 Oct 31 2018 /usr/bin/wc
[root@qls ~]# mv /usr/bin/wc /usr/bin/gl
[root@qls ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@qls ~]# gl /etc/hosts
2 10 158 /etc/hosts
[root@qls ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
1 /usr/bin/gl
#从缓存中删除一个命令的缓存
[root@qls ~]# hash -d wc
[root@qls ~]# wc /etc/hosts
-bash: wc: command not found
[root@qls ~]# mv /usr/bin/gl /usr/bin/wc
[root@qls ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@qls ~]# mv /usr/bin/wc /usr/sbin/
[root@qls ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@qls ~]# hash -d wc
[root@qls ~]# wc /etc/hosts
2 10 158 /etc/hosts
#清空hash缓存表中的所有缓存
[root@qls ~]# hash -r
[root@qls ~]# hash
hash: hash table empty
#里面存放的是系统中的命令的路径,每个路径用:号分割
[root@qls ~]# echo $PATH
2. vi/vim介绍
[root@qls ~]#
[root@qls ~]# yum install -y vim
3. 命令模式
#光标移动
[root@qls ~]# cp /etc/services ./
G #光标移动行尾 当前文件的最后一行
gg #光标移动到第一行
1G #光标移动到第一行
10G #光标移动到第十行
10gg #光标移动到第十行
ngg #光标移动到指定的行
nG #光标移动到指定的行
^ #光标移动到当前行行首
$ #光标移动到当前行的行尾
h #向左 5h 向左移动5个字符
l #向右 5l
j #向下 5j
k #向上 5k
w #移动到下一个字符串的首字母 短跳 以空格或者特殊符号为分隔符
W #移动到下一个字符串的首字母 长跳 以空白字符为分隔符
e #移动到下一个字符串的尾字母 短跳 以空格或者特殊符号为分隔符
E #移动到下一个字符串的尾字母 长跳 以空白字符为分隔符
b #移动到上一个字符串的首字母 短跳 以空格或者特殊符号为分隔符
B #移动到上一个字符串的首字母 长跳 以空白字符为分隔符
ctrl键 + f #向下翻页
ctrl键 + b #向上翻页
ctrl键 + u #向上翻半页
ctrl键 + d #向下翻半页
#复制 粘贴
yy #复制当前行
nyy #复制多行 包含当前行
p #在当前行的下一行进行粘贴
P #在当前行的上一行进行粘贴
np #粘贴多次
nP #粘贴多次
#删除==剪切 粘贴
dd #删除当前行 剪切当前行
ndd #删除多行 包含当前行
dG #删除当前行到文件的结尾
delete #从前往后删除一个字符
x #从前往后删除一个字符
X #从后往前删除一个字符
de/dw #删除当前一组字符串 以特殊符号或者空白字符为分割
D #删除当前光标所在字符及当前行向后的所有的内容
#撤销 简单替换
u #撤销
ctrl键 + r #回滚你的撤销
r #在当前光标上面进行替换 没有进入编辑模式
R #连续替换
~ #把当前光标所在字符替换为大小写
>> #将当前行向后进行缩进
<< #将缩进取消
fi #将光标快速移动到当前行的第一个i字符 ; 跳转到下一个
* #高亮显示当前光标所在的字符串 向下跳转
# #向上跳转
#保存退出
ZZ #保存退出
4. 编辑模式
# 编辑模式需要从命令模式进入
a #在当前光标后进入编辑模式
i #在当前光标前进入编辑模式
o #在当前光标下另起一行,进入编辑模式
A #在当前光标所在行的行尾进入编辑模式
I #在当前光标所在行的行首进入编辑模式
O #在当前光标所在行的上方另起一行,进入编辑模式
s #删除当前光标所在的字符,并进入编辑模式
S #删除当前行,并进入编辑模式
cc #删除当前行,并进入编辑模式
C #删除当前光标所在的字符及向后的所有内容,并进入编辑模式 针对当前行操作
ce #删除当前所在的字符,并进入编辑模式
cw #删除当前所在的字符,并进入编辑模式
5. 底行模式
#只能从命令模式进入底行模式
#保存退出
:q #退出
:q! #强制退出
:w #保存
:wq #保存退出
:wq! #强制保存退出
:x #保存退出
#光标移动 移动的行 删除
:n #n 数字 跳转到指定的行
:1d #删除第一行
:1,10d #删除多行
#替换 跟sed一样
:%s#old#new#g #全局替换
:1s#admin#root#g #替换指定的行
:1,5s#bin#oldboy#g #替换多行
# 文件另存为
:w new1.txt #将文件的内容另存为一个新文件
:1,10w new2.txt #将文件的第一行到第十行内容另存为一个新文件
#导入其他文件内容进入这个文件
:$r /etc/hosts #导入/etc/hosts文件中的内容到此文件的结尾
:0r /etc/hosts #导入/etc/hosts文件中的内容到此文件的行首
#搜索
/root #搜索root的字符串
n #向下查找
N #向上查找
/root\c #搜索的时候,忽略大小写
:noh #取消高亮
6. 视图模式
#添加内容
光标先移动到你要操作的行的 首行或者尾行 的具体某个字符
ctrl键 + v #进入可视块模式
通过移动光标将要操作的行选中
按shift键 + i键 进入insert模式
输入你要添加的内容
输入完成之后 按Esc就可以
#删除
光标先移动到要删除的行的首行或者尾行 到达具体某个字符
ctrl键 + v #进入可视块模式
通过光标选中你要删除的内容
按d删除
可视行
#添加 复制 粘贴
光标移动到要复制的行的首行或者尾行
按shift键 + v #进入可视行模式
选中你要复制的行 按y复制
光标移动到你要粘贴的位置 输入 p粘贴
#删除
光标移动到要删除的行的首行或者尾行
按shift键 + v #进入可视行模式
``
7. vim的变量
#显示行号
:set nonu #取消行号
:set list #给每一行的结尾加上制表符 $
:set nolist #取消制表符的显示
:noh #取消高亮显示
:set ic #搜索的忽略大小写
vim环境变量的配置文件
~/.vimrc #个人用户的配置文件 优先级高
/etc/vimrc #全局环境变量配置文件
set nu #写在文件中
[root@qls ~]# cat ~/.vimrc
set
8.vim文件比对
[root@qls ~]# diff passwd passwd.bak #了解
2d1
< ROOT
13c12
< vfgbvgnftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
---
> ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@qls ~]# vimdiff passwd passwd.bak #把不同之处进行高亮显示
9.vim打开多个文件
#水平打开两个文件进行编辑 切换窗口使用 ctrl键 + ww
[root@qls ~]# vim -o old.txt new.txt
#垂直分割两个文件
[root@qls ~]# vim -O old.txt new.txt
#快速的到达指定的行
[root@qls ~]# vim +10 passwd.bak
10. vim执行过程
1. vim打开一个文件进行编辑
2. 系统会生成一个临时文件 ,以点开头的临时文件 后缀名为.swp
3. 刚进入文件的模式的命令模式
4. 通过命令模式可以进入编辑模式,进行编辑文件
5. 编辑文件完成之后需要输入Esc键,退出编辑模式进入命令模式
6. 从命令模式进入底行模式,进行保存退出
7. 保存退出之后,系统会将临时文件的内容覆盖到源文件,之后删除临时文件
11.vim故障
E325: ATTENTION
Found a swap file by the name ".passwd.swp"
owned by: root dated: Thu Jul 16 20:14:27 2020
file name: ~root/passwd
modified: YES
user name: root host name: qls
process ID: 81955
While opening file "passwd"
dated: Thu Jul 16 19:11:50 2020
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r passwd"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".passwd.swp"
to avoid this message.
Swap file ".passwd.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
#故障
vim非正常退出导致的
按照提示 进行恢复 保存退出之后
在手动的删除这个文件
[root@qls ~]# rm -f .passwd.swp