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
;并且,添加并提交。
#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来检查文件是否被修改后,它们才会被注意到。
评论
您可以使用:wa来确保没有未保存的文件。确实,在进行git commit ...之前确保所有文件都保存起来非常“麻烦”。