【发布时间】:2016-04-28 21:48:22
【问题描述】:
我正在尝试在 mintty 上的 cygwin 上设置 vim 作为我在 TFS (2012) 中的自定义差异工具,并且我遇到临时文件在 vim 可以查看它们之前消失的问题。我将首先介绍到目前为止我尝试过的内容:
当我注意到我的问题时,我尝试只使用本机 windows vim.exe,它在 windows 控制台下使用以下设置可以正常工作:
我还可以让它在 windows 控制台内运行 vim 的 cygwin 副本正常工作:
但是一旦我尝试使用 mintty,我会在 vim 中打开空文件,并且 TFS 传递给 vim 的文件在 TFSTemp 目录中不存在:
我认为 C:\Users\me\AppData\Local\Temp\TFSTemp 目录有一些 Windows 魔法。在前两种情况下,我可以在 Windows 资源管理器中导航到该目录并找到传递给 vim 的文件。但是,当我使用 mintty 时,文件不会显示在资源管理器中。我怀疑这与 TFS 如何处理其临时文件有关。也许 mintty 提供的间接层在某种程度上被 TFS 误解为我关闭了 diff 实用程序?
我对 Windows 或 TFS 的内部工作原理不够熟悉,不知道为什么会发生这种情况,但我的 google-fu 产生了一个似乎与我的问题有关的单一结果: http://www.scootersoftware.com/vbulletin/showthread.php?5538-Beyond-Compare-and-TFS-Problems-with-temporary-files
第一个发布者在使用 beyondcompare diff 实用程序时遇到了同样的文件丢失问题,公司的回应表明使用了错误的可执行文件。显然,他们的两个名称相似的可执行文件中的一个将为每次比较保持一个单独的进程打开,而另一个将只使用一个进程,并且如果您将单进程可执行文件用于 TFS,则会出现丢失文件的问题。我不确定这如何映射到我的问题。
这就是我在这个问题上能找到的全部内容,因此感谢您提供任何帮助。目前,我正在尝试制作一个解决方法 .bat 文件以在启动 mintty 之前将临时文件保存在不同的目录中,但这对我来说似乎有点笨拙(而且我的批处理脚本技能非常初级/不存在)。
更新: 我想出了一个可用的解决方案,它带有一个批处理脚本来启动 mintty,然后再使用 sleep 命令。这使文件保持打开足够长的时间,以便 vim 可以为它们打开缓冲区,这对我来说已经足够了(我只是查看差异)。睡眠命令完成后,文件被删除(我假设由 TFS)。如果我用暂停命令结束脚本,文件将保留在 TMP 文件夹中,直到我在 cmd.exe 窗口中按下一个键。
【问题讨论】: