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

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

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

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

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

这时我们在连接1中用wq保存退出,在连接2中再次查看目录下的文件列表。结果发现swp文件消失了,取而代之的是出现了我们所创建的vim.txt文件
上述情况是正常保存退出的,那如果我们正在写文件,突然断电退出了,会怎么样呢?我们来模拟一下这个情况

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

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

同样是E325,但实际上详细信息和之前的情况是不同的,这次的详细信息会说,写这个文件内容的vim进程可能是崩溃了,我们可以用:revover或者vim -r vim.txt把文件内容给恢复一下,之后把.vim.txt.swp删去
那么现在我们就可以清晰的整理一下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原理
聊聊Vim的工作原理的更多相关文章
- 聊聊jstack的工作原理
实现一个jstack 在聊Jstack得工作原理前呢,不如让我们先写一个简单的jstack玩玩.不用怕,很简单的,就几行代码的事,看: public class MyJstack { public s ...
- 聊聊高并发(三十四)Java内存模型那些事(二)理解CPU快速缓存的工作原理
在上一篇聊聊高并发(三十三)从一致性(Consistency)的角度理解Java内存模型 我们说了Java内存模型是一个语言级别的内存模型抽象.它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的 ...
- yum服务器搭建(深入理解yum工作原理)
作者:firefoxbug 时间:July 27, 2014 分类:Linux 前言 在前面一篇rpm包制作描述了rpm的打包过程,这篇文章主要讲述yum的工作原理. yum 运行原理 yum的工作需 ...
- LVS-DR工作原理
我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由).对于LVS-DR,你到底了解到什么程度?本文通过一个实例场景,详细介绍 ...
- 图解WebGL&Three.js工作原理
“哥,你又来啦?”“是啊,我随便逛逛.”“别介啊……给我20分钟,成不?”“5分钟吧,我很忙的.”“不行,20分钟,不然我真很难跟你讲清楚.”“好吧……”“行,那进来吧,咱好好聊聊” 一.我们讲什么? ...
- 刨根问底:什么是yum源,yum的工作原理又是什么
1.刨根问底---什么是yum源?yum的工作原理? 说到yum源就必须说到linux系统中特有的依赖关系问题,yum就是为了解决依赖关系而存在的.yum源就相当是一个目录项,当我们使用yum机制安装 ...
- 说一下Dubbo 的工作原理?注册中心挂了可以继续通信吗?
面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ.ES.Redis.Dubbo,上来先问你一些思考性的问题.原理,比如 kaf ...
- NFS服务器工作原理
一.NFS简介 NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器 ...
- Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...
随机推荐
- CSS 导航栏底线向两边延伸动画
利用元素向左移动的同时,宽度变长,实现两边延伸效果. react代码: <ul className="tab"> { moduleList.map((item: any ...
- 基于WPF重复造轮子,写一款数据库文档管理工具(一)
项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...
- js实现两种99乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Java中的线程】java.lang.Thread 类分析
进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...
- 5.27 NOI 模拟
\(T1\)约定 比较水的\(dp\)题 上午想到了用区间\(dp\)求解,复杂度\(O(n^5),\)貌似没开\(long\ long\)就爆掉了 正解还是比较好想的,直接枚举从何时互不影响然后转移 ...
- java学习第二天多态.day09
接口 接口总结 接口表示一种规约(规范.标准),它里面定义了一些列抽象方法(功能),它可以被多个类实现. 1接口名称首写字母用I,表示一个接口,后命名使用驼峰命名 2.接口中定义的都是抽象方法,所以可 ...
- redis-zset命令
一.BZPOPMAX key [key ...] timeout BZPOPMAX 是有序集合命令 ZPOPMAX带有阻塞功能的版本. 在参数中的所有有序集合均为空的情况下,阻塞连接.参数中包含多个有 ...
- MapReduce计算流程
MapReduce的计算流程 1.1 原始数据File The books chronicle the adventures of the adolescent wizard Harry Potter ...
- 【MySQL】从入门到掌握3-WorkBench
上期:[MySQL]从入门到掌握2-下载安装 我们安装完MySQL Server的时候,是没有任何界面的. 不过很好,我们有一个工具,MySQL Workbench,他可以简化我们的操作,有点像Jav ...
- Java连接简单使用ElasticSearch
目录 1. 添加依赖 2. 代码,无账号密码 3. 代码,有账号密码,并且是https方式 4. 参考文章 1. 添加依赖 <!-- https://mvnrepository.com/arti ...