一、vi编辑器
(1)为什么学vi?
- 所有的Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在;
- 很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
- vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
- 程序简单,编辑速度相当快速。
Vim的发布最早可以追溯到1991年,英文全称为:“Vi IMproved”,也就是对vi编辑器的提升版本,其中最大的改进当属对代码的着色功能,亦有些编程场景能够自动修正错误代码。
在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。在日常工作中大家也肯定免不了要编写文档,这些工作都是通过文本编辑器来完成的。Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了三种模式:命令模式、末行模式和编辑模式(插入模式),每种模式别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。
(2)使用vi/vim编辑文件
#在每次运行Vim编辑器时,默认进入命令模式
[root@master ~]# vim /etc/passwd
也可以就输入一个 vim,也是默认进入命令模式
[root@master ~]# vim
1、vim三种模式的切换
特点区分(都是看最后一行底部):
- 命令模式:没有任何信息或显示文件名和相关信息
- 插入模式:最后一行显示 insert
- 末行模式:最后一行显示 :
2、命令模式下的常用按键
(1)光标跳转按键
(2)复制、粘贴、删除
补充:
d + enter | 删除光标所在行以及光标下一行 |
x | 删除光标所在字符 |
Ndd(例:3,5dd) | 删除光标行开始3-5行内容 |
dG | 删除光标所在行到文档尾 |
dgg | 删除光标所在行到文档首 |
s | 字符替换,替换光标所在字符 |
cc | 剪切光标所在行 |
ctrl + r | 向右撤销 |
命令模式进入插入模式的方式
按esc键可从编辑模式切换到命令模式
命令模式进入插入模式的方式
按 : 或者 / 可从命令模式切换到末行模式。按esc键可从末行模式切换到命令模式。
3、末行模式
(1)查找关键字并替换
(2)保存退出
(3)其他操作
补充:
取消高亮显示 | :noh |
跳转到第5行 | :5 |
将所有行的0字符替换出2 | : s/0/2/g |
4、vim的拓展用法
(1)可视化模式
按Ctrl+v进入可视化模式
该模式下通过光标移动选择文本,选取后按 y 可以把文本提取到缓冲区(即复制),c 可以剪切。之后可以使用p在光标后粘贴,P粘贴在光标前
(2)多文档编辑
在打开一个文件的时候,输入 :sp /dir/file 可分屏显示另一个文件
光标在多个文件之间的切换按ctrl+w w
5、vim的配置文件
[root@master test]#vim /etc/vimrc
[root@master test]#vim ~/.vimrc
set hlsearch "高亮度反白
set backspace=2 "可随时用退格键删除
set autoindent "自动缩排
set tabstop=4 "缩进
set softtabstop=4 softtabstop是“逢4空格进1制表符”,前提是你tabstop=4
set shiftwidth=4 自动缩进空格长度
set mouse=a "使用鼠标
set selection=exclusive
set selectmode=mouse,key
set ruler "可显示最后一行的状态
set showmode "左下角那一行的状态
set nu "可以在每一行的最前面显示行号啦!
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示
6、vim练习
(1)修改主机名
[root@localhost ~]# vim /etc/hostname
(2)设置登录欢迎语
[root@localhost ~]# vi /etc/motd
hello
(3)修改中断当前进程的快捷键
[root@localhost ~]# vi ~/.bashrc
stty intr "^b"
#中断当前进程的快捷键就会变成ctrl+b
二、文本内容处理命令
1、数据流和重定向
1、数据流
- 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
- 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
- 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:
- 标准输入(stdin):代码为0
- 标准输出(stdout):代码为1
- 标准错误输出(stderr):代码为2
2、重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
- 输出重定向操作符: > 、 >>
- 输入重定向操作符: < 、 <<
3、输出重定向案例
标准输出重定向: 1> 或 > 、 1>> 或 >>
标准错误输出重定向: 2> 、 2>>
案例1:输出重定向(覆盖)
[root@localhost ~]# date 1> date.txt
案例2:输出重定向(追加)
[root@localhost ~]# date >> date.txt
案例3:错误输出重定向
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt
#重定向到不同的位置
案例4: 正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaaaaa &>list.txt
#混合输出
案例5: 正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>&1
#重定向到相同的位置
案例6:重定向到空设备/dev/null
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null
#空设备,即将产生的输出丢掉
[root@localhost ~]# ls /home/ /aaaaaaaaa &>/dev/null
#空设备,即将产生的输出丢掉
2、echo 打印命令 (标准输入输出的命令)
#echo helloworld
[root@localhost ~]# echo $HOSTNAME $ 引用变量
localhost.localdomain
[root@localhost ~]# echo "$HOSTNAME" “” 弱引用符 (可以解释特殊含义的字符)
localhost.localdomain
[root@localhost ~]# echo '$HOSTNAME' ‘’ 强引用符(不解释特殊含义的字符)
$HOSTNAME
[root@localhost ~]# echo 当前主机时间$`date` ``命令替换符
当前主机时间Sat Nov 26 14:56:27 CST 2022
root@localhost ~]# echo 当前主机时间$(date) $()命令替换符
当前主机时间Sat Nov 26 14:56:27 CST 2022