首页 > 其他分享 >聊聊Vim的工作原理

聊聊Vim的工作原理

时间:2022-10-05 12:11:20浏览次数:74  
标签:文件 vim 编辑 聊聊 swp test 原理 txt Vim

聊聊Vim的工作原理

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

梳理

PrDun.png

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

PrFos.png

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

Prulp.png

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

PrGod.png

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

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

Pr74h.png

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

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

PrDun.png

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

PrH1p.png

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

PrAAN.png

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

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

结论

PHmw6.png

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,编辑,聊聊,swp,test,原理,txt,Vim
From: https://www.cnblogs.com/appletree24/p/16755355.html

相关文章

  • SAP UI5 应用元数据文件 manifest.json 的加载和解析原理讲解试读版
    一套适合SAPUI5初学者循序渐进的学习教程本专栏计划的文章数在​​300​​​篇左右,到​​2022年9月22日​​​为止,目前已经更新了​​133​​​篇,专栏完成度为​​......
  • JVM调优-GC基本原理和调优关键分析
    1.写在前面今天我们分享一下:垃圾回收算法,和调优的关键指标,等内容。2.JVM的GC基本原理2.1什么是垃圾?在内存中没有被引用的对象就是垃圾(一次请求会在内存中创建出很多的对象......
  • rocketmq工作原理
    1.消息的生产过程消息生产过程,经历如下过程:1.向NameServer发出获取消息Topic的路由信息的请求2.nameServer返回该Topic的路由表以及Broker列表3.Producer根据代码中指定的Q......
  • 老生常谈React的diff算法原理-面试版
    第一次发文章notonly(虽然)版式可能有点烂butalso(但是)最后赋有手稿研究finally看完他你有收获diff算法:对于update的组件,他会将当前组件与该组件在上次更新是对应的......
  • RAID磁盘阵列的原理与搭建
    一、RAID概念1、概述   磁盘阵列(RedundantArraysofIndependentDisks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘,以硬件......
  • 计算机组成原理实验1
    莎比机组,单片机不是不学了吗计算机系统基础实验一1.1实验概述实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。实验目标:加深对数据二进制编码表示......
  • vim编辑器用法
    一、文本编辑1.1移动光标移动光标的键盘对应按键如下(小键盘的方向键也可移动光标位置↓↑←→)  1.2vim的进入与退出vim教程的进入:vimtutor+回车vim编辑的退出:......
  • 深度剖析React懒加载原理
    目录代码分割React的懒加载import()原理React.lazy原理Suspense原理参考1.代码分割(1)为什么要进行代码分割?现在前端项目基本都采用打包技术,比如Webpack,JS......
  • golang GC原理
    一、堆栈栈(heap):由操作系统自动分配释放。一般函数内部执行中声明的变量,函数返回时直接释放,不会引起垃圾回收,对性能无影响堆(stack):一般由程序员分配释放,若程序......
  • vscode vim keybinds.json vscode的按键配置
    vscode的keybindings.json//Placeyourkeybindingsinthisfiletooverridethedefaultsauto[][//以前配置的上下左右移动按键{"key":"alt+j","......