| show | step |
|---|---|
| version | 1.0 |
| enable_checker | true |
- 命令行的光标控制
- 方向键⬅️️➡️️️可以控制左右移动
- shift+⬅️️➡️️️按照word左右移动光标
- ctrl+b 到开头begin
- ctrl+e 到结尾end
- ctrl+w 向前删除一个word
- ctrl+u 删除到开头
- 历史命令的遍历
- 方向键↑️↓️️️
- 命令行的历史记录
:history:his -5:his s
- 进入命令历史记录编辑
- 命令行状态下 ctrl+f
- 或者正常模式下 q:
- 选择、编辑、回车
- 使用寄存器
- 命令行状态下 ctrl+r
- 然后输入寄存器的名称就可以了
- 命令模式可以读写文件吗?🤔
- 我们一般打开文件的方法是在
shell里面vi oeasy.txt
- 如果我们直接进入了
vi还可以再打开文件吗?- 可以!
- 用
:e oeasy.txt - 就可以打开
oeasy.txt e意味着edit
- 不清楚的话
- 可以
:h :e看到手册!
- 可以
- 如果我们不知道要打开文件的名字
- 可以执行
:!ls看到相应的名字
- 可以执行
- 可以打开目录么?
- 试试!👊
- 直接
:e . - 可以打开当前目录
.代表当前目录:pwd可以看到当前目录- 就是运行
vi的目录
- 上下方向键选择我们需要编辑的文件
- 然后回车开始编辑这个文件
- 右上角看到插件名称和版本
- netrew
- v165
:h netrw
-向上一层DDeleteRRenamessort 切换模式x特殊 在File Manager中打开
- 有些命令没有快捷键
- 新建文件夹
!mkdir oeasy
- 新建文件
e oeasy.rs
- 已经打开了一个缓存文件
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:29r !ls -lah
- 这会让
- 这样可以把文件当做输出来用
- r !echo $PATH
- r !cowsay oeasy
- r !cat /proc/net/tcp
- 但是我只想要oeasy.css的2-4行怎么办?
- 读取的范围可以用sed命令来控制
- 我们来试一下
:!sed -n 1,3p oeasy.css- 只读取oeasy.css的前三行
- 然后我们可以把这个结果 read 进入到当前文件中
:r !sed -n 1,3p oeasy.css- 可以把oeasy.css前三行读取到当前行之下
:15r !sed -n 1,3p oeasy.css- 可以把oeasy.css前三行读取到15行之下
:!ls -lah | sed -n 4,9p- 显示ls查询结果的4-9行
:r !ls -lah | sed -n 4,9p- 把ls查询结果的4-9行重定向到当前文件的当前行下方
:9r !ls -lah | sed -n 4,9p- 把ls查询结果的4-9行重定向到当前文件第9行下方
:h gq
#先更新源
sudo apt update
#fortune可以输出谚语 在<linux>教程那部分有介绍
sudo apt install fortune
#使用fortune生成谚语
fortune -l
#进入vi
:r !fortune -l
:set nopaste:set textwidth=30- 控制文字宽度为30
gq3kgq控制宽度3k是 {motion}- 指的是本行和上面三行
gq3jgq控制宽度3j是 {motion}- 指的是本行和上面三行
- 也可以用
gq3回车
- 注意如果是在
vi -u NONE的情况下- gq3j是可以用的
- gq3回车也可以通用
- motion但是超越了文档的范围也会报错
- 从这一点来说
- vim 确实是很好地完善了vi
- 不过我又想问了
- 那可以再次改变宽度么?
:set textwidth=50gq8k
#先安软件 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命令行模式
- 然后
:visual切换回来
- 然后
- 或者正常模式下q:进入搜索命令的模式
- 搜到后,修改好,回车执行
- 正常模式下可以使用 Q 进入Ex命令行模式
- 我们先查
: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 - 这个时候有一些细节
- 建议
- 观察两个文件的时间
- 用较新的文件
- 应避免类似的情形
- 如果需要同时写一个文件
- 建议用
git之类的 版本控制工具
- 建议用
- 我们这次研究了文件读写
- 打开是
e,edit:e oeasy.txt:e .
- 读是
:r,read:3r o2z.txt- 在指定位置(3)读取文件
:9r !ls -lah- 在指定位置(9)读shell命令运行结果
:r !sed -n 1,3p oeasy.css- 可以把oeasy.css前三行读取到当前行之下
:6r !sed -n 1,3p oeasy.css- 在指定位置(6)把oeasy.css(1-3行)读取到当前行之下
- 写是
:w,write:w o3z.txt- 直接写
:3,8w o3z.txt- 范围写
:w o3z.txt >>- 追加写
:w! o3z- 强制写
- 命令行可以进行批量替换么?🤔
- 下次再说 👋