在vim中编辑保存历史记录

时间:2013-06-30 01:59:57

标签: macos vim macvim

假设我正在使用vim编辑文件,然后保存( 1 )。我继续编辑,然后再次保存( 2 )。是否可以“删除”最后一次保存 - 这意味着vim会将文件保留为当前状态,但认为最后一次保存是 1

为了澄清,我打开一个文件并写

one
two

我保存它。然后我继续编辑它,所以它现在是

one
two
three
four

现在我需要将它保存在这种状态,然后做某事(这是我想知道的),这将使vim仍然显示我

one
two
three
four

但是,如果我关闭文件(或使用:e!还原文件,那么它将处于

状态
one
two

我想这样做是因为我使用processing,并且要将它与外部编辑器一起使用,它依赖于在文件上执行的外部程序,这意味着它需要保存,因此程序可以根据文件的所需状态进行操作。但是,有时候,我有一个已保存的文件,并且只想进行一些更改以测试结果。但是,如果我不喜欢这个结果,我会“坚持”这个新的保存版本(除非我记得我需要撤消多少次才能获得之前保存的状态),而且我正在寻找一个将此链接到保存文件并针对它运行程序的命令。

4 个答案:

答案 0 :(得分:2)

这是从原始编辑中获取的。

  

我有一个vim动作需要在执行之前保存文件   它,但我仍然希望保持实验可能性(所以   如果我不喜欢这些变化,我可以这样做:e!或关闭文件。是   有可能吗?

您要找的是version control。版本控制允许您更改文件,保存和撤消这些更改。请查看gitsvn

以下是git可以做的一个例子。

假设您有一个包含内容的文件

one
two

然后您可以将文件签入版本控制软件。 (使用git,你可以git commit

稍后您将文件修改为

one
two
three
four

此时您可以执行git diff并查看自上次提交以来对文件所做的所有更改。

如果您喜欢这些更改,可以提交更改。如果您不喜欢这些更改,可以执行git checkout <file>并将文件恢复为旧状态

one
two

答案 1 :(得分:1)

这是一种基于minitech的答案的方法。 注意我没有对此进行过广泛的测试。

  1. 进行原始编辑,然后保存。
  2. 进行下一次编辑,然后保存。
  3. 使用:ea 1f在最后一次保存时恢复到缓冲区的状态(请参阅:h :earlier)。
  4. 再次保存。
  5. 使用:lat 1f返回步骤2后面的缓冲区(请参阅:h :later)。
  6. 使用:set nomodified,因此Vim认为缓冲区未被修改,因此需要再次保存。
  7. 由于您在步骤3和步骤4中执行的操作,磁盘上的文件仍然会像在步骤1之后一样。

    但是我还建议你改用版本控制。 fugitive plugin是在Vim中使用Git的一种非常好的方法,它不会妨碍你。

答案 2 :(得分:0)

你的两个描述似乎相互冲突,所以我会回答第二个:)

要将当前文件标记为未修改,请执行以下操作:

:set modified!

答案 3 :(得分:0)

听起来你只想:

  1. 撤消更改
  2. 保存文件
  3. 重做更改

    :undo | w | redo<CR>