3

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

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

我该如何解决?我可以命令 vim 停止制作 swp 文件,或者 vimdiff 忽略它们,或者将其 swp 文件写入不同的地方吗?

4

3 回答 3

7

是的,(也许),是的。

要关闭交换文件:

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

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

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

于 2012-06-29T04:10:08.573 回答
4

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

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

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

我可能推荐的另一个插件是VCSCommand

于 2012-06-29T17:44:05.280 回答
1

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

于 2013-09-02T09:45:17.680 回答