回忆上节课内容🤔
打开文件
- 我们一般打开文件的方法是在
shell
里面
- 如果我们直接进入了
vi
还可以再打开文件吗?
- 可以!
- 用
:e oeasy.txt
- 就可以打开
oeasy.txt
-
e
意味着edit
- 不清楚的话
- 如果我们不知道要打开文件的名字
- 可以打开目录么?
- 试试!👊
打开目录
- 直接
:e .
- 可以打开当前目录
-
.
代表当前目录
-
:pwd
可以看到当前目录
- 就是运行
vi
的目录
- 上下方向键选择我们需要编辑的文件
- 然后回车开始编辑这个文件
netrw插件
netrw插件
常用命令
-
-
向上一层
-
D
Delete
-
R
Rename
-
s
sort 切换模式
-
x
特殊 在File Manager中打开
执行命令
- 有些命令没有快捷键
- 新建文件夹
- 新建文件
- 已经打开了一个缓存文件
oeasy.txt
- 我们可以用
:r
把别的文件读取进来进行读取
- 比如有个
oeasy.css
在当前目录下
- 我们可以
:r ~/.vimrc
-
:h :r
- 查询r命令的帮助手册
- 手册告诉我们
r
意味着read
在指定位置读取文件
- 这样是插入整个文件,当然也可以指定位置
-
:9r oeasy.css
就是在第9行下面插入完整的 oeasy.css
- 还可以把命令的结果读取当前文件
:r !ls
- 这会让
!ls
的输出结果流到当前行之下
- 复杂的也可以
:r !ls -lah
- 也可以控制
range
- 这样可以把文件当做输出来用
- r !echo $PATH
- r !cowsay oeasy
- r !cat /proc/net/tcp
- 但是我只想要oeasy.css的2-4行怎么办?
控制读取范围
- 读取的范围可以用sed命令来控制
- 我们来试一下
-
:!sed -n 1,3p oeasy.css
- 然后我们可以把这个结果 read 进入到当前文件中
-
:r !sed -n 1,3p oeasy.css
-
:15r !sed -n 1,3p oeasy.css
使用管道
-
:!ls -lah | sed -n 4,9p
-
:r !ls -lah | sed -n 4,9p
- 把ls查询结果的4-9行重定向到当前文件的当前行下方
-
:9r !ls -lah | sed -n 4,9p
- 把ls查询结果的4-9行重定向到当前文件第9行下方
固定列宽
具体控制
#先更新源
sudo apt update
#fortune可以输出谚语 在<linux>教程那部分有介绍
sudo apt install fortune
#使用fortune生成谚语
fortune -l
#进入vi
:set nopaste
-
:set textwidth=30
-
gq3k
-
gq
控制宽度
-
3k
是 {motion}
- 指的是本行和上面三行
运行结果
-
gq3j
-
gq
控制宽度
-
3j
是 {motion}
- 指的是本行和上面三行
- 也可以用
gq3
回车
- 注意如果是在
vi -u NONE
的情况下
- gq3j是可以用的
- gq3回车也可以通用
- motion但是超越了文档的范围也会报错
- 从这一点来说
- 不过我又想问了
改变宽度
使用管道
#先安软件 fortune、boxes、lolcat 在<linux>教程那部分有介绍
sudo apt install fortune boxes catlol
#使用fortune生成谚语
fortune -l
#把谚语通过管道送入boxes
fortune -l | boxes -d cat
#改成彩色
fortune -l | boxes -d cat | lolcat
#进入vi
:r !fortune -l | boxes -d cat
扩展命令区
- 可以设置
:set cmdheight=3
增大命令区高度
- 确实可以增加命令区高度
- 不过,这并不能从根本上解决问题
- 回忆一下
- 正常模式下可以使用 Q 进入Ex命令行模式
- 或者正常模式下q:进入搜索命令的模式
写文件
- 我们先查
:h :w
-
:w
意味着 write
-
:w o3z.txt
把当前文件内容写到 o3z.txt
- 加上{range}
-
:3,8w o3z.txt
把第3到第8行写到 o3z.txt
- 如果
o3z.txt
不存在怎么办?
-
:w! o3z
先建立文件再写入
- 强制写
- 但是如果已经存在的文件会造成覆盖
- 想要追加append应该如何
-
:w >> o3z.txt
把内容追加写入到 o3z.txt
面对崩溃
-
vi oeasy.txt
- 新开一个终端
ls -a .oeasy.txt.*
- 发现已存了一个.oeasy.txt.swp
- 把原来的终端关上
- 相当于原来的终端崩溃了
- 因为第一个终端没有保存文件
-
oeasy.txt
不存在
-
vi oeasy.txt
- 会提醒我虽然没有
oeasy.txt
- 但是替换文件
swp
是有的
- 刚才没存到文件的东西
- 这样可以恢复
-
vi -R oeasy.txt
多人编辑
- 一个终端打开并编辑
oeasy.txt
- 另一个终端也想打开并编辑
oeasy.txt
- 这个时候有一些细节
- 建议
- 观察两个文件的时间
- 用较新的文件
- 应避免类似的情形
- 如果需要同时写一个文件
总结
- 我们这次研究了文件读写
- 打开是
e
,edit
- 读是
:r
,read
-
:1,3r o2z.txt
范围读
-
:4,9r !ls -lah
读shell命令运行结果
- 写是
:w
,write
-
:w o3z.txt
直接写
-
:3,8w o3z.txt
范围写
-
:w o3z.txt >>
追加写
-
:w! o3z
强制写
- 命令行可以进行批量替换么?🤔
- 下次再说 👋