恢复 Vim 备份

2024-04-12

Vim 的文件备份系统刚刚保存了我众所周知的@$$,但我有一个问题。

我有 vim 保存备份到~/.vim/backups

为了恢复它们,我进入该目录并将所需的文件(按日期排序)复制回项目文件夹中的必要目录。很简单,只有 5 个文件。然而,令我惊讶的是没有明显的方法来查找每个文件来自哪个目录。我尝试使用vim -r path/to/file但这似乎使用交换而不是备份文件。因为在我的例子中,vim 没有崩溃(我只是错误地覆盖了文件),所以这些文件没有交换。

所以主要问题是:恢复vim的最佳方法是什么backup files?

附带问题:当我有来自不同路径的两个同名文件(例如/path/one/file.html and /path/two/file.html)?


要回答有关恢复的问题,Vim 对备份一无所知。它的备份系统非常简单——写一个文件。要恢复,您必须手动执行。

但是,您可以向备份添加更多信息,以便更轻松地恢复。

理想情况下,backupdir将尊重尾随//强制它扩展文件的路径并替换/ with %. e.g. /tmp/foo.rb将成为备份文件“tmp%foo.rb”。

See :help undodir and :help directory为了undo and *.swp需要的目录设置//.

但我们可以伪造这个!

" Prevent backups from overwriting each other. The naming is weird,
" since I'm using the 'backupext' variable to append the path.
" So the file '/home/docwhat/.vimrc' becomes '.vimrc%home%docwhat~'
au BufWritePre * let &backupext ='@'.substitute(substitute(substitute(expand('%:p:h'), '/', '%', 'g'), '\', '%', 'g'),  ':', '', 'g').'~'

备份文件先读取文件名,然后读取目录,但它确实有效并且应该足够唯一。

例子:.vimrc%home%docwhat~是作为备份/home/docwhat/.vimrc

如果您想要每分钟备份,以便减少工作损失,您可以在文件名中附加时间戳:

au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') .  '~'

但我建议您设置一个 cron 作业来定期清理此目录。如果你编辑我的那么多文件,这个文件很快就会变得很大。

或者,你可以做一些聪明的事情并改变backupdir在写作之前(与BufWritePrehook),但 vim 的聪明程度超出了我的范围(目前)。

Ciao!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

恢复 Vim 备份 的相关文章

随机推荐

  • 在javascript中将坐标存储在数组中

    我想将坐标存储到JavaScript中的数组中 我是 javascript 新手 不知道该怎么做 任何帮助 将不胜感激 有多种方法可以存储 x y 坐标 选项 1 数组中的所有其他索引 function storeCoordinate x
  • 将 DartAngular 与 dart:html 结合使用

    是否可以使用默认的 dart 库html有角飞镖 IE class Test1Component implements OnInit override void ngOnInit ButtonElement button querySele
  • 是否有相当于 T4MVC 的 Web 表单?

    我在我的 asp mvc 项目中使用 T4MVC 主要是因为它非常棒 是否有与 asp webforms 相当的东西 事实证明 David Ebbo 他也做了 T4MVC 的东西 也给了 asp webforms 一点爱 http blog
  • 在步骤定义文件之间共享相同的 selenium WebDriver

    现在我们正在努力采用 Cucumber 在我们的 Java8 Spring 应用程序上运行功能测试 我们希望我们的步骤定义文件尽可能保持干燥 因此计划在不同的功能文件中使用相同的步骤定义 由于我们使用的是硒WebDriver为了驱动我们的测
  • 为什么 GCC 对这种隐式转换发出警告?

    GCC 警告我以下代码包含可能更改值的隐式转换 include
  • 在 C# 中为函数名创建别名

    我想在 C 中为函数名创建别名 除了函数重载还有什么办法吗 public class Test public void A 我想用B代替A 如下所示 var test new Test test B I m surprised that n
  • 我应该自行提交表格还是提交到外部文件?

    我对编程相当陌生 特别是 Coldfusion 我很好奇我是否将表单提交到其所在的页面并在那里处理结果 或者是否应该将其提交到外部文件进行处理是否有区别 然后从那里重定向 它可以发挥作用 当我第一次开始编程时 我经常会做这样的事情 myfo
  • 在 JavaScript 或 Node 中将 Blob 数据转换为原始缓冲区

    我正在使用插件jsPDF https github com MrRio jsPDF它生成 PDF 并将其保存到本地文件系统 现在在 jsPDF js 中 有一些代码可以生成 blob 格式的 pdf 数据 如下所示 var blob new
  • 带参数的 ASP.NET ODBC 查询

    请帮助我 我不知道以下代码有什么问题 OdbcConnection conn new OdbcConnection connString String query INSERT INTO customer custId custName c
  • Python 使用 euc-kr 编码以意想不到的方式对(韩语)字符进行编码(编解码器、编码模块)

    我尝试在 python 中读取一些以 euc kr 编码的韩语文本文件 但出现了一些错误 检查后encodings使用模块一段时间后 我了解到该模块以看似非常奇怪的方式对韩语字符进行编码 让我举个例子 韩国文字 这是一个很少使用的字符 但我
  • 在 main() 中为 SerialPort 添加事件处理程序

    我尝试将事件处理程序订阅到数据接收事件 似乎我无法指定事件处理函数名称 我不明白为什么myComPort DataReceived new SerialDataReceivedEventHandler comPort DataReceive
  • 规范的 HTTP POST 代码?

    我见过很多发送 http post 的实现 并且不可否认 我并不完全理解底层细节以了解需要什么 在 C NET 3 5 中发送 HTTP POST 的简洁 正确 规范代码是什么 我想要一个通用方法 例如 public string Send
  • .net MAUI c# 后台任务ContinueWith和通知事件

    编辑 已解决 见下文 编辑 这是一个新手问题 我只是深入研究 C 和异步 为什么我想要 单击按钮 按顺序运行多个任务 但在后台线程中一个接一个地运行 如果可能的话 正在运行的任务应该通知它们的进度 现在我可以单击按钮并启动任务链 但在完成事
  • pandas 正则表达式从第一次出现的字符开始向前和向后查看

    我有像下面这样的Python字符串 1234 4534 41247612 2462184 2131 GHI xlsx 1234 4534 sfhaksj DHJKhd hJD 41247612 2462184 2131 PQRST GHI
  • Sharp JS 依赖性破坏了 Elastic Beanstalk 上的 Express Server

    我觉得这毫无用处 因为我的难题已在多个不同的线程中讨论过 但没有任何效果 我有一个 ExpressJS 节点服务器部署到 AWS Elastic Beanstalk 当我几周前第一次尝试部署时 我无法让它运行 直到我最终意识到我的许多依赖项
  • DEP0600:部署失败。 XmlException - '.'(十六进制值 0x00)是无效字符

    MS VS2017 微软 Visual Studio 2017 DEP0600 部署失败 XmlException 十六进制值 0x00 是无效字符 编辑开始 解决方案可能就在附近 请保留建议一天 在 回复下面的评论 我已将原来的VS201
  • Firebase 将匿名用户帐户转换为永久帐户错误

    使用 Firebase for web 我可以成功创建匿名用户 我还可以创建一个新的电子邮件 密码用户 但是当尝试将匿名用户转换为电子邮件 密码用户时 我收到错误 auth provider already linked User can
  • C#:设置任意维度数组中的所有值

    我正在寻找一种将多维数组中的每个值设置为单个值的方法 问题是维数在编译时是未知的 它可能是一维的 也可能是 4 维的 自从foreach不允许你设定价值观 我可以实现这一目标的一种方法是什么 非常感谢 虽然这个问题表面上看起来很简单 但实际
  • sqlite - 查找可以由一组成分制成的食谱

    现在我在ios应用程序中使用sqlite 我希望能够搜索可以从成分列表中制作的食谱 即作为所提供成分的子集的食谱 例如 Recipe 1 A B C Recipe 2 A B Recipe 3 C D Recipe 4 A Recipe 5
  • 恢复 Vim 备份

    Vim 的文件备份系统刚刚保存了我众所周知的 但我有一个问题 我有 vim 保存备份到 vim backups 为了恢复它们 我进入该目录并将所需的文件 按日期排序 复制回项目文件夹中的必要目录 很简单 只有 5 个文件 然而 令我惊讶的是