vim管理及其输入输出
vim管理及其输入输出
Vim是linux中的一个文本处理器,具有程序编辑能力,而且可以自动以颜色辨别语法错误。Vim是vi的进阶版。
1.命令模式下配置vim的工作方式
复制/etc/passwd到当前工作目录
回车后进入vim的命令模式
:set nu 添加行号
:set nonu 取消行号
:set cursorline 显示行线
:set mouse =a 添加鼠标选择
命令模式下输入 :set nu **注意英文输入哦
回车行号显示
:set cursorline 显示行线 输入后按一下回车键
:set mouse=a 添加鼠标选择(vim内鼠标一般是不起作用的)
**上途中命令行最右边的3%指当前文本内容占整个文本的百分比,3,26表示当前光标所在位置,第3行第26个字符
以上操作之仅在当前打开的vim中生效,设定永久生效,命令模式下:wq退出当前vim环境,shell命令行后输入vim /etc/vimrc,打开vimrc文件
按i进入编辑模式,**在适当地方写入相应指令如图所示,esc退出编辑模式 :wq保存退出vim
再次进入passwd的vim环境可以发现显示行号与行线
2.vim命令模式下关键字搜索
/ 关键字
n 向下匹配
N 向上匹配
在passwd文件中搜索用户student的信息。
命令号模式下输入 :/student
回车即可,高亮已经标示出
**n 向下匹配,N 向上匹配,是在命令行模式下哦,并且不需要输入,主意大小写,直接按键盘的字母就可以了。
3.vim命令模式下字符的管理
复制,粘贴,剪切都是在命令模式下进行的,并且不需要在命令模式下命令行后输入参数的,其中剪切,光标所在位置,剪切后按下esc 然后移动光标到所在位置按p进行粘 贴
字符的复制
yl ##复制1个字母
y3l ##复制3个字母
yw ##复制1个单词(以实验passwd为例 : / x 算作一个单词,复制删除,剪切时注意哦)
y3w ##复制3个单词
yy ##复制光标所在行
y5y ##复制光标行在内的5行
p ##粘贴
字符的删除
dl ##删除一个字母
d2l ##删除两个字母
dw ##删除一个单词
d3w ##删除三个单词dd ##删除1行
d5d ##删除5行
字符的剪切
cl ##剪切一个字母
c3l ##剪切3个字母
cw ##剪切一个单词
c3w ##剪切3个单词
cc ##剪切一行
c3c ##剪切3行
esc ---> p ##剪切过后会进入到插入模式,在执行粘贴动作时一定要退出插入模式
u ##撤销操作
ctrl + r ##反撤销操作
复制第一行r字母粘贴到'bash'后
键盘操作光标停留在“r”上,依次按下“ y1l” ,“end”光标移动到第一行末尾按“p”粘贴
将刚才复制的“r”删除
键盘操作光标停留在“r”上,依次按下“d1l”即可
删除掉了“r”
剪切第一行中前四个字母,粘贴到第2行,并撤销此次所有剪切动作
键盘操作光标停留在第一行r上,
依次按下c4w ,下图所示已经剪切成功
光标移动到最后,可以按向右方向键也可以直接按end了,光标移动到最后也就是h上后,一定记得按下esc,再按p才能出现以下结果,不然h后会出现一个p哦,四个字母 含: x哦
连续按下两次u即可撤销操作
按住Ctrl不放的同时,在按下r键进行反撤销操作 (就不演示了)
4.vim的可视化模式
在命令模式下按“ctrl+v”进入到可视模式,在可视模式下可以区域选择字符,视模式下批量添加字符,ctrl+v 选中要加入字符所在列
按“I”进入插入模式,写入要加入的字符
按esc 完成区块编辑
ctrl+v,进入可视化模式,左下角一定会出现--VISUAL BLOCK--哦,注意是选区背景成为灰色,按上下左右进行选区(选错了按esc退出可视化模式,再按ctrl+v进入可视化模 式)
已经显示灰色,选区成功
大写字母模式下,按I,浅灰色消失,进入编辑模式,光标自动跳到第一行第一个字母上,按下shift+3,输入“#”符,
在上边的基础上按下esc (两次哦,第一次退出插入模式,第二次才是完成效果)效果完成
5.批量修改字符
:%s/原有字符/替换后字符 ##只替换每一行中出现的第一个原有字符
:%s/原有字符/替换后字符/g ##替换所有
:1,5s/原有字符/替换后字符/g ##替换1-5行
将刚才的在第一列的每一行的“#”删除,vim命令行模式下输入 :%s/#//g
回车完成替换操作
替换前5行的“#”为“@‘,第5行后边的不做替换 输入命令 :1,5s/#/@/g
只将每一行中第一次出现的sbin替换bin,
回车后操作成功,注意第7行和第8行哦
6.vim的分屏功能
ctrl+w s ##上下分屏
ctrl+w v ##左右分屏
ctrl+w c ##关闭光标所在屏幕
ctrl+w 上下左右 ##光标移动到指定屏幕
:sp file2 ##同时编辑当前文件和file2
上下分屏:按住ctrl不放再按w,然后松开所有按键,再按下s,即可;左右分屏,按住ctrl不放再按w,然后松开按v,按住ctrl不放再按w,然后松开按c,关闭光标所在屏 幕,按住ctrl不放再按w,然后松开按四个方向键,光标移动到分屏幕。
:q!强制退出vim passwd,新建文件file,再进入passwd中,命令行输入:sp file,按下回车键
将passwd中的第二行复制到file中
键盘操作:在vim passwd 命令行键入:sp file 出现以下工作界面
Crtl+w 松开按键后按下向下的按键,
光标停留在第一行,命令模式下按下yy
Ctrl+w up 光标移动到file文件屏幕,按下p进行粘贴
光标移动第一行按下dd删除第一行空白行
Ctrl+w c关闭file文件
报错:因为内容更改
命令模式下 :wq!强制保存退出
:wq保存退出vim passwd,shell命令行查看file文件内容
7. vim光标移动在命令模式下
(除了移动到特定的某一行需要在命令行输入命令:[digit]外,其他操作在命令模式***意大小写直接按相应的字母就可以进行操作了,不再演示)
:数字 ##移动到指定的行
G ##文件最后一行
gg ##文件第一行
i ##光标所在位置插入
I ##光标所在行行首s
a ##光标所在字符的下一个位置
A ##光标所在行行尾
o ##光标所在行下一行
O ##光标所在行上一行
s ##删除光标所在字符插入
S ##删除光标所在行插入
移动到第13行 命令 :13
8.vim的退出模式
q=wuit 退出的意思,w=write 写的意思,!强制,这样就能很好理解这几种退出模式了
:q ##当用vim打开文件但没有对字符作任何操作时可直接退出
:q! ##当用vim打开文件并对字符作操作,放弃所有操作退出
:wq ##保存退出
:wq! ##强行保存退出,对超级用户及文件所有人生效
需要说明的是为正常退出的情况,直接关闭vim 或者ctrl+d,
再次进入vim时会出现以下内容,发现了“.passwd.swp”的文件,最下边有相应的按键选择,根据自身需要进行相应的操作即可,O打开只读模式,E 进行编辑,R进行恢复 D 删除,Q 退出,A 废除
9.vim手册
vimtutor ##vim的手册
:q ##退出vimtutor
10.管理输入输出
在linux系统中,正确输出的编号为1,错误输出编号为2
在系统中用普通用户执行 "student"
find /etc -name passwd
因为student用户权限问题会有以下输出
find: ‘/etc/pki/CA/private’: Permission denied ##没有进入权力,报错
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/audit’: Permission denied
/etc/passwd ##正确输出
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/modules/active’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/grub.d’: Permission denied
/etc/pam.d/passwd ##正确输出
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/named’: Permission denied
find /etc -name passwd > file ##重定向正确输出(默认为1,你也可以在前边加1)
find /etc -name passwd 2> file ##重定向错误输出
find /etc -name passwd &> file ##重定向所有输出
注意: >, 2> ,&> 都会覆盖源文件内容
>filename ##清空filename
find /etc -name passwd >> file ##追加正确输出
find /etc -name passwd 2>> file ##追加错误输出
find /etc -name passwd &>> file ##追加所有输出
注意:>> 2>> &>> 不会覆盖源文件内容,会把相应的输出字符方到文件的最后
| 管道,管道的作用是将前一条命令的输出变成管道后命令的输入
ls /bin | wc -l ##统计ls /bin 命令输出的行数
系统中错误的输出是无法通过管道的。
用 2>&1 可以把错误的输出编号由2变成1
tee 复制输出到指定位置
date |tee file |wc -l ###tee命令复制date命令的输出到file中,并统计输出行数
输入重定向 <
tr 'a-z' 'A-Z' <file
多行录入
cat >file <<we
> hello
> redhat
> we
结束
操作实验:su -username切换用户stdent ,查找passwd中的文件(不切换的话就全成了正确输出了)
重新定向正确输出,正确输出存在student用户桌面上的file.T,当然我们需要切换当前工作目录
查看file.T
重新定向错误输出,错误输出存在student用户桌面上的file.R,并查看file.R
重新定向所有输出,输出存在student用户桌面上的file.A,并查看file.A
当前工作目录(student用户下的桌面也就是/home/student/Desktop)新建一个文件file
Vim编辑四行内容分别是1,2,4,3保存退出后再在student用户身份很下/etc/passwd中的正确输出保存到file文件中,要求不能覆盖源文件内容。
管道 |
列出/bin下的所有内容
......(省略很多行)
1587行,很多的,ls /bin 列出此文件的内容后经管道 | 传入下一个命令wc -l 最后显示出结果。
错误的输出无法经过管道,比如find /etc/ -name passwd 中的错误输出
统计find /etc/ -name passwd 中的错误输出的个数,其中2>&1意思是把错误输出编号2转为1,这样才能通过管道执行wc统计命令
tee 复制输出到指定位置
查看当前时间保存到file4中 并查看file4内容
命令: date |tee file4 |cat
输入重定向 <
新建文件westos vim编辑内容 westos WESTOS ,全转为大写后重新定向输入westos中
多行录入
cat >file <<we
> hello
> redhat
> we
结束
补充1
Student自己修改密码的方法之一,已知旧密码为student新密码为westos,
sh执行 key时,当然失败了,新密码少于8位,返回去重新设定新密码就ok了
补充2
重新定向输出错误输出扔进垃圾箱,统计正确输出个数。/dev/null是垃圾箱