我的设置是使用vim(特别是MacVim在图形模式下)编辑源文件,然后我使用vimdiff(mercurial)存储库差异(再次以图形模式)。有时候,当我做差异时,vim会给我错误:
交换文件"〜/ nn / src / imm / model / injector_node / .values_table.py.swp"已经存在!
我该如何解决这个问题?我可以命令vim停止生成swp文件,还是让vimdiff忽略它们,或者将其swp文件写入不同的地方?
答案 0 :(得分:6)
是的,(也许),是的。
关闭交换文件:
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中打开了相同的文件。如果您只是在执行差异之前关闭文件,那么您应该没问题。
答案 1 :(得分:4)
我建议采用不同的方法:不使用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。
答案 2 :(得分:1)
我知道这个问题已经超过一年了,但我可以推荐lawrencium,一个将mercurial集成到vim中的插件,灵感来自于git的精彩fugitive插件。通过一些简单的命令,他们可以轻松地完成您正在做的事情(以及许多其他CVS事情)。他们没有付我这么说;插件真的很棒!