【问题标题】:Vim swp files interfere with repository vimdiffVim swp 文件干扰存储库 vimdiff
【发布时间】:2012-06-29 03:58:16
【问题描述】:

我的设置是使用 vim(特别是图形模式下的 MacVim)来编辑源文件,然后我使用 vimdiff(再次在图形模式下)进行(mercurial)存储库差异。有时,当我做 diff 时,vim 会给我错误:

交换文件“~/nn/src/imm/model/injector_node/.values_table.py.swp”已经存在!

我该如何解决这个问题?我可以命令 vim 停止生成 swp 文件,或者命令 vimdiff 忽略它们,或者将其 swp 文件写入不同的位置吗?

【问题讨论】:

    标签: vim macvim vimdiff


    【解决方案1】:

    是的,(也许),是的。

    关闭交换文件:

    set nobackup
    set nowritebackup
    set noswapfile
    

    更改交换文件的位置(我的首选):

    " Set the directory of the swap file
    " The // indicates that the swap name should be globally unique
    set directory=~/.vim/tmp//,/tmp
    

    这里我将它设置在.vim 下的tmp 目录中。请参阅:h 'directory' 了解选项的每个部分代表什么。

    至于让 Vimdiff 忽略交换文件,我不太确定。但错误可能正在发生,因为当您使用 Mercurial 检查差异时,您已经在 MacVim 中打开了相同的文件。如果您只是在执行 diff 之前关闭文件,那么您应该没问题。

    【讨论】:

    • 谢谢,我想这解决了我的问题!我不想在执行 diff 之前关闭文件,但“//”是否会确保如果两个编辑器打开相同的文件,他们不会尝试使用相同的交换文件?
    • @NeilG:不,不会。 “全局唯一”的意思是每个文件都有一个完全限定的名称。通常,交换文件只是文件名(因为默认情况下,Vim 在与源文件相同的目录中创建交换文件),所以如果你在 /home/foo 中有一个名为 bar 的文件,以及另一个文件在称为bar/home/baz 中,它们不会在“全局唯一”方案下发生冲突。交换文件是一种安全机制,因此如果您不想关闭另一个窗口,您可以关闭交换,或者在提示时选择“仍然编辑”。
    • @NeilG 最好不要使用“仍然编辑”,而是“以只读方式打开”。
    • @ZyX:但是如果他需要合并他的更改怎么办?他必须实际保存文件,不是吗?
    • @voithos 它不会禁止保存它们,尽管他必须在:w 前面使用一个爆炸。但是在问题中,要求查看存储库差异,而不是编辑它们,并且诸如“文件已在其他地方编辑”之类的消息很烦人。实际上,在这种情况下,我总是更喜欢使用我的 aurum:交换文件或在不同位置打开两个文件没有问题:您只需在创建它们的同一个 vim 中查看更改。
    【解决方案2】:

    我会建议一种不同的方法:不要使用 mercurial 命令行界面来查看文件之间的差异,而是使用添加 VCS 支持的 vim 插件之一,在这种情况下,您不需要关闭任何东西,也不需要对交换文件做任何事情.

    例如,使用我的aurum,您可以使用<leader>aD(映射到:AuVimDiff)查看当前打开的缓冲区与其在存储库中的版本之间的差异,然后使用<Leader>X 切换回正常视图(如果您没有编辑任何内容,它甚至会恢复打开/关闭的折叠)。如果您使用let g:aurum_vimdiffusewin=1 并使用垂直或水平(取决于“diffopt”)同样大小的分割,那么我的脚本将重用相邻窗口之一。

    使用<leader>agD,您可以在vimdiff 拆分的多个选项卡中查看对存储库中所有文件的所有更改(不包括添加和删除的文件):它映射到:AuVimDiff full。据我所知,这个功能几乎是独一无二的:有一些用于 mercurial 的脚本可以完成相同的工作,但它没有与其他 VCS 插件集成。同样,<leader>X 关闭所有选项卡。已经打开的缓冲区不会关闭,其他的会。

    我推荐的另一个插件是VCSCommand

    【讨论】:

      【解决方案3】:

      我知道这个问题已经有一年多了,但我可以推荐lawrencium,一个将mercurial 集成到vim 中的插件,灵感来自于git 的fugitive 插件。只需几个简单的命令,它们就可以使您正在做的事情(以及许多其他 CVS 事情)变得更加容易。他们没有付钱让我这么说;插件真的很棒!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2012-11-18
        • 1970-01-01
        • 2016-05-15
        相关资源
        最近更新 更多