聊聊Vim的工作原理

聊聊Vim的工作原理

日常里一直在用Vim这个编辑器,前阵子学习关于Linux中的fd(文件描述符)时,发现vim的进程描述符会比上一个自动加一,后续了解到vim的工作原理后,解开了这个疑问,所以记录一下。

梳理

聊聊Vim的工作原理

首先开一个连接,然后在连接1中用 vim vim.txt搞一个文件出来

聊聊Vim的工作原理

之后开一个连接2,在目录下输入 ll,发现没有什么变化,但紧接着输入 ls -la

聊聊Vim的工作原理

可以看到有一个名为 .vim.txt.swp的隐藏文件,而且创建时间和我们输入指令的时间是相同的。如果这时候我们尝试同样输入 vim vim.txt,会看到如下报错:

聊聊Vim的工作原理

根据英文的意思我们不难了解,vim会判断当前目录里是不是已经有了 .$文件名.swp这个文件,如果有,那么就说明有编辑这个文件的进程正在运行,所以我们当前不能再创建一个同名的文件了

而且这个swp文件是一个二进制文件,我们也没法查看他的内容

聊聊Vim的工作原理

这时我们在连接1中用wq保存退出,在连接2中再次查看目录下的文件列表。结果发现swp文件消失了,取而代之的是出现了我们所创建的vim.txt文件

上述情况是正常保存退出的,那如果我们正在写文件,突然断电退出了,会怎么样呢?我们来模拟一下这个情况

聊聊Vim的工作原理

还是同样在连接1中使用 vim vim.txt写入文件内容,这时我们不用wq保存退出,而是直接断开连接

聊聊Vim的工作原理

可以看到目录下同样出现了名为 .vim.txt.swp的隐藏文件,如果我们这时候再次输入 vim vim.txt就会看到这样的报错

聊聊Vim的工作原理

同样是E325,但实际上详细信息和之前的情况是不同的,这次的详细信息会说,写这个文件内容的vim进程可能是崩溃了,我们可以用:revover或者 vim -r vim.txt把文件内容给恢复一下,之后把 .vim.txt.swp删去

那么现在我们就可以清晰的整理一下vim的整个工作流程了

结论

聊聊Vim的工作原理

vim 编辑文件原理:
01.开始利用vim编辑一个文件
02.需要检查是否有该文件的临时隐藏文件
有:会有报错信息
无:进行编辑同时产生一个临时隐藏文件 /test/test.txt.swp
03.在命令模式就会产生临时隐藏文件 /test/test.txt.swp
04.进入编辑模式进行编辑
05.编辑完成,确定是否为正常保存退出
是:正常保存退出,同时将该文件的临时隐藏文件重命名
否:非正常退出,产生一个临时隐藏文件并长期保留,下次进行编辑会报错
解决问题方法:
1)查看文件内容 — 大写O
2)重新编辑 — 大写R
3)不恢复进行编辑 — 大写E
4)将临时文件删除
a)按大写字母D
b)rm -f /test/test.txt.swp

参考内容

vim工作原理_奥尔特星云大使的博客-CSDN博客_vim原理

Original: https://www.cnblogs.com/appletree24/p/16755355.html
Author: Appletree24
Title: 聊聊Vim的工作原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685628/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • RPM -U 升级机制探索

    今天被RPM升级机制狠狠的阴了一把,差点没过来,趁着热乎赶紧记录下来,已被后用。 RPM包有升级机制(Upgrade), 使用-U 参数。这点我之前略有耳闻,知道的并不详细。 先说…

    技术杂谈 2023年6月1日
    097
  • 如何正确地在Axis、Axis2和Apache CXF之间抉择?

    新一代的 Web Services 框架如 Axis2、CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由大家熟悉的 Axis 1.x 系列演化过来,而 Apache CX…

    技术杂谈 2023年5月31日
    082
  • TC插件管理器及在TC中新建文件

    新建文件 Shift+F4可以新建文件,但是会调用内置的编辑器来打开。 在设置中通过修改F4快捷键对应的程序来修改。 PS.F4编辑没找到根据扩展名来调用指定程序打开,可以F3中进…

    技术杂谈 2023年6月1日
    0114
  • 期末代码

    使用Java的输入输出流将一个文本文件的内容按行读出,每读出一行,就顺序添加行号,并写入到另一个文件中。 import java.io.*; public class E { pu…

    技术杂谈 2023年6月21日
    084
  • 是时候使用 YAML 来做配置或数据文件了

    概述 我们做程序,经常需要用到配置信息,回顾一下这么多年的搬砖生涯,我记得用过多种格式的文件来定义配置信息,例如 ini文件, xml&…

    技术杂谈 2023年5月31日
    089
  • [Python]-json模块-处理字典数据的存取

    import json 函数 json.dumps() json.dumps()函数是将字典转化为字符串 json.loads() json.loads()函数是将字符串转化为字典…

    技术杂谈 2023年7月10日
    061
  • AT&T汇编语言——工具及程序组成

    1. 开发工具 在汇编语言中,用到的工具主要用下面几个: 汇编器、连接器、调试器、编译器 由于我在这里的是AT&T 汇编语言。所以工具下也都是gnu 下的那些。 1.1 汇…

    技术杂谈 2023年5月30日
    0109
  • K8s集群环境搭建

    K8s集群环境搭建 1、环境规划 1.1 集群类型 Kubernetes集群大体上分为两类:一主多从和多主多从 一主多从:一台master节点和多台node节点,搭建简单,但是有单…

    技术杂谈 2023年6月21日
    085
  • crudapi增删改查接口零代码产品成功案例之金茶王投票系统

    crudapi增删改查接口零代码产品成功案例之金茶王投票系统 简介 2020年由于疫情原因,金茶王投票活动改成线上云投票,所以需要一套投票系统进行比赛。参赛选手包括两种类型,分别为…

    技术杂谈 2023年7月24日
    065
  • 面向对象ooDay5

    默认的:什么也不写,本类、同包类 说明: java不建议默认访问权限 类的访问权限只能是public或默认的,类中成员的访问权限如上4种都可以 访问权限由小到大依次为:privat…

    技术杂谈 2023年7月11日
    078
  • Optimize(程序优化)

    更快(本课程重点!) 更省(存储空间、运行空间) 更美(UI 交互) 更正确(本课程重点!各种条件下) 更可靠 可移植 更强大(功能) 更方便(使用) 更范(格式符合编程规范、接口…

    技术杂谈 2023年7月11日
    074
  • Redis+Lua实现简易的秒杀抢购

    1 商品抢购 主要逻辑是:减库存,记录抢购成功的用户 @RestController public class DemoController { @Resource private…

    技术杂谈 2023年7月24日
    074
  • FastJSON 后端返回Long型 前段精度丢失的问题

    解决方法就是将Long型转换为字符串—全局配置方案如下: @Override public void configureMessageConverters(List&g…

    技术杂谈 2023年5月30日
    084
  • 一文读懂数据库发展史

    本文力求以简单易懂的语言描述出数据库发展史,尽量避免出现复杂的概念介绍。数据库演进史如图1所示: 图1 数据库演进 一、穿孔纸带和文件系统 在现代意义的数据库出现之前(20世纪60…

    技术杂谈 2023年7月25日
    097
  • 微信二维码支付

    准备工作 概述:微信扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信 扫一扫完成支付的模式。该模式适用…

    技术杂谈 2023年6月21日
    0101
  • HTML:1.初识web

    认识WEB 「网页」主要是由 文字、 图像和 超&#x94FE…

    技术杂谈 2023年7月11日
    058
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球