使用gvim(v.7.4.488)编辑源代码时,我想对vcs进行一些更改(我在Ubuntu linux中从命令行使用git 2.1.4)。

git --status


显示我更改了哪些文件。但是,它还会显示当前可见缓冲区的vim .*.swp(如果文件包含未保存的更改,以及编辑的文件与.*.swp -file相同)。当然,git可以忽略这些文件,或者vim可以将交换文件存储在其他位置(请参见vim.wikia或stackoverflow上的此问题)。但是我喜欢.*.swp-当文件包含未保存的更改时出现在git --status中的文件,因为它表明我正在以与我认为的状态不同的状态提交文件。

我如何避免当保存的文件与.*.swp -file相同时,git --status -files的误报出现在.*.swp中,同时能够看到要提交的文件与我正在用vim编辑的文件处于不同状态? br />

如果磁盘上的文件和vim中的文件不同,是否可能只有.*.swp-文件?
还有其他方法可以检测未保存的文件吗?

将@elyashiv和@VanLaser的注释相结合,比检测交换文件是否暗示未保存的文件更简单:


不要让git忽略。*。sw [ po]文件;
提交时,如果git --status显示任何.*.sw[po] -files在vi中执行:wa;并且,
添加并提交。


评论

您可以使用:wa来确保没有未保存的文件。

确实,在进行git commit ...之前确保所有文件都保存起来非常“麻烦”。

#1 楼

命令行上的vim -r将列出当前目录和临时目录中的所有交换文件,以及它们是否包含任何未保存的更改。寻找说modified: no/YES的行。

我不知道如何告诉Vim在不同的目录中查找,因此您需要切换到包含交换文件的每个目录并运行vim -r 。您可以想出一个脚本来解析git status的输出,或者使用find -name '.*.sw[po]',然后在每个目录中运行vim -r,以显示所有未保存更改的交换文件。

(我使用.*.sw[po]而不是.*.swp ,因为有时在编辑已经具有交换文件的文件时会创建除.swo文件之外的.swp文件。如果您使用两个现有交换文件编辑文件,也可以创建.swn文件。如果您真的很偏执,可以使用.*.sw[a-p]或简单地使用.*.sw?。)有关恢复和交换文件名的信息。

评论


好吧,Vim的交换文件是隐藏文件(文件名中的。),因此正确的模式应为。*。sw [a-p](尽管在病理情况下,实际上可以一直到达.foo.saa)。这也应该排除匹配的Flash文件,因为我怀疑这些文件通常是隐藏文件。

–詹姆斯
15年8月10日在18:33

@jamessan领导。在外壳程序glob中是必需的,但是* .swp用作查找的参数。但是领先。使事情变得简单。谢谢!

– Lithis
15年8月10日在18:47

#2 楼



如果磁盘上的文件和vim中的文件不同,是否只有.*.swp-个文件?



是的。下面的代码片段(改编自tpope的vimrc)将在不进行修改的情况下禁用缓冲区的交换文件,因此交换文件仅适用于已修改的文件。注意事项:由于交换文件仅在修改缓冲区后才存在,因此您将无法使用交换文件作为咨询锁定。如果缓冲区未修改,则另一个Vim可以开始编辑该缓冲区,而无需注意它已经打开。如果第二个Vim在第一个进行更多更改之前保存,那么直到用户尝试保存或某些触发Vim来检查文件是否被修改后,它们才会被注意到。