Vim swp文件干扰存储库vimdiff

Vim swp文件干扰存储库vimdiff,vim,macvim,vimdiff,Vim,Macvim,Vimdiff,我的设置是使用vim(特别是图形模式下的MacVim)编辑源文件,然后使用vimdiff(再次在图形模式下)执行(mercurial)存储库差异。有时,当我进行差异时,vim会给出错误: 交换文件“~/nn/src/imm/model/injector\u node/.values\u table.py.swp”已存在 我该如何解决这个问题?我是否可以命令vim停止生成swp文件,或者vimdiff忽略它们,或者将其swp文件写入其他位置?是,(可能),是 要关闭交换文件,请执行以下操作: se

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

交换文件“~/nn/src/imm/model/injector\u node/.values\u table.py.swp”已存在

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

是,(可能),是

要关闭交换文件,请执行以下操作:

set nobackup
set nowritebackup
set noswapfile
要更改交换文件的位置(我的首选):

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


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

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

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

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


我可以推荐的另一个插件是。

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

谢谢,我想这解决了我的问题!我不想在执行差异之前关闭这些文件,但是“/”能否确保如果两个编辑器打开了相同的文件,它们不会尝试使用相同的交换文件?@NeilG:不会。“全局唯一”的意思是每个文件都有一个完整的限定名。通常,交换文件只是文件名(因为默认情况下,Vim在与源文件相同的目录中创建交换文件),因此,如果在
/home/foo
中有一个文件名为
bar
,在
/home/baz
中有另一个文件名为
bar
,则它们在“全局唯一”方案。交换文件是一种安全机制,因此如果您不想关闭另一个窗口,您可以关闭交换,或者在提示时选择“无论如何编辑”。@Neig最好不要使用“无论如何编辑”,而是“以只读方式打开”@ZyX:但是如果他需要合并他的更改怎么办?他必须实际保存文件,不是吗?@voithos不会禁止保存这些文件,尽管他必须在
:w
前面使用砰砰的一声。但是在这个问题上,它被要求查看存储库差异,而不是编辑它们,以及“文件在其他地方编辑过”之类的消息实际上,我总是喜欢在这种情况下使用我的aurum:交换文件或在不同的位置打开两个文件没有问题:您只需在创建它们的同一vim中查看更改。
" Set the directory of the swap file
" The // indicates that the swap name should be globally unique
set directory=~/.vim/tmp//,/tmp