vim .swp文件的结构是什么?

4
一个应用程序想要将文本输出到vim,并实时知道正在进行的编辑操作。
.swp文件提供了这些信息。有人能指导如何使用Python读取这个二进制文件吗?

open("yourfile.swp","rb")? - Padraic Cunningham
1
注意:我猜修改vim会更容易,而不是尝试解析交换文件... - Karoly Horvath
@KarolyHorvath:我认为OP使用“shell text out”作为某种俚语,意思是“将文本输出到控制台”(类似于“我花了100美元买了这些超棒的门票”)。 - inspectorG4dget
1
如果您找不到描述Vim交换文件结构的文档,可以尝试查看源代码。src/memline.c:ml_recover()看起来是一个很好的起点。 - Ves
请提供更多背景信息;您的最终目标是什么?当问题只涉及到一个小的技术步骤时,很难提供一个好的答案。如果您不告诉我们为什么您需要这个,那么很容易陷入XY问题 - Ingo Karkat
3个回答

4
我写ls.swp工具时,对.swp文件格式进行了自己的研究,该工具可以查看.swp内容(这是一个带有大量文档的perl脚本)。
我感兴趣的主要来源是: 解析这个过程需要进行一些反向工程,我只能提取出一些数据。我想要的是关于编辑文件状态的一些基本信息。我的结果如下:
$ ls.swp .ls.swp.sw*
.ls.swp.swo:adamhotep@tabasco:~/git/misc-scripts/ls.swp (running) 85d ago
.ls.swp.swp:adamhotep@tabasco:~/git/misc-scripts/ls.swp 85d ago

我相当确定您不会获得任何实时数据,因为这只会是vim维护的大量磁盘I/O。


1
交换文件会在键入“updatecount”(默认为200)个字符或经过“updatetime”(默认为4000)毫秒没有任何输入时进行写入。因此,它是半实时的,并且其实时性是可调节的。 - hobbs

1
我不会依靠交换文件的内容来获取实时更新。它的格式是针对 Vim 的使用而设计的,除了通过它的实现之外,它的格式没有被记录。你需要复制大部分算法,并在内部格式更改时(未经事先通知),保持其维护。
或者,我会使用其中一种嵌入式语言(例如 Python)与要获取实时更新的外部程序进行接口。例如,Python 函数可以定期通过套接字发送整个缓冲区内容。

0
感谢回复的所有人。
我希望.swp会有文件说明,甚至可以访问代码,但似乎并没有。
建议使用Python编写插件可能是最合理的,我打赌可以钩取像'on_keystroke'这样的东西,并维护一个我可以理解的镜像。
“shell out”就像“将此文本块写入临时文件,在vim中打开该文件,当vim退出时,将临时文件内容写入替换文本块”一样。
附言:花100美元购买这些门票是太贵了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接