Visual Studio Code:自动刷新文件更改

160

在使用 Visual Studio Code 时,我注意到如果您正在处理的文件发生更改,每当该文件在代码面板中被聚焦时,它将重新从磁盘中加载(如果您没有通过 VSCode 对文件进行更改)

然而,如果您正在使用该文件,就不会有警告来提醒您有文件更改。

我一直在查看设置,但找不到像 Visual Studio 选项一样的功能:

  

检测文件是否在环境外更改

所以我的问题是:是否有任何隐藏的设置或一些技巧可以使该警告出现。

更新

已在 Visual Studio Code 版本0.3.0 中解决。

  1. 如果编辑器中没有更改,则该文件将从磁盘更新(在执行过程中非常有用的读取日志文件)
  2. 如果双方都有更改(从磁盘和编辑器),则每当您尝试使用 VSCode 保存文件时,编辑器都会警告您此情况(即“脏写入”),并且文件比较将允许您决定要做什么。

1
如果有更改,为什么不想要它们呢? - John Papa
19
我正在尝试获得与Visual Studio或Sublime Text相同的行为。 如果我没有通过IDE进行更改,则IDE中的文件应更新为来自硬盘驱动器的最新版本。 如果我在IDE内外都进行了更改,则应弹出警告,提示该情况。 类似于“文件xxx已在磁盘上更改。您要重新加载它吗?” - Juan M. Elosegui
请参考以下链接 https://dev59.com/US8AtIcB2Jgan1zn7aJ1#59941475 和 https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_42.md#ignore-save-conflicts,了解有关此行为的一些更改,包括如果您希望防止通知的能力。 - Mark
4
@johnPapa很简单,假设您一直在编辑一个文件,认为它是另一个文件。您突然意识到这一点,想要放弃您的更改。或者更相关的是,您检出了不同的git分支。几乎所有其他编辑器(如notepad++)都会立即显示“文件已在磁盘上更改。您要重新加载吗?”。但Vscode不会检测到它,并且您可以进行更改、保存并最终覆盖错误的分支,这是非常糟糕的。我无法相信我在2020年仍然遇到这个问题。 - Gostega
6个回答

92

如果您在文件中进行了未保存到磁盘的更改,VSCode将不会刷新该文件。但是,如果该文件已打开且没有更改,则它将使用磁盘上的更改进行替换,这是正确的。

目前没有办法禁用此行为。


82
其他编辑器都有这个功能。用户可能会意外修改一些文件,但实际上用户想要的是被告知该文件在磁盘上已更改,并询问是否要重新加载,至少可以通过编辑器上的一些通知面板来实现这一点。 - Warren P
5
其他编辑器可能也有这个问题,但是即使在关闭和重新打开 VSCode 后,这种行为仍然存在,如果您没有预料到这一点,那么非常危险。您可能会同时打开 10 个文件,在两天后回到 VS2017 并回到 VSCode,然后进行“保存所有”操作... - Simon_Weaver
6
@Ingemar 我真的很想尝试一下VSCode(不仅是为了Angular智能感知),也许会在VS2017和VSCode之间切换。我经常在VSCode中进行更改但没有保存,然后最终在VS2017中更改同一文件。我回到VSCode并意外地将文件保存在我的更改上(即使关闭/重新打开后)。仅仅几天内我的更改就至少消失了两次,当我最终弄清楚原因时,这几乎就是我和VSCode的分手了。至少VSCode应该在保存已在VSCode中打开且已被外部修改的文件时发出警告。 - Simon_Weaver
4
这个回答已经有3年了,有人就这个问题提出了问题吗?你能否在这里发布链接? - Fabio says Reinstate Monica
53
“File: Revert File” 可以用来从磁盘上获取最新的内容。 - Benjamin Pasero
显示剩余18条评论

40
{
    "files.useExperimentalFileWatcher" : true
}

在“代码”-“首选项”-“设置”中

在Mac和Windows上测试过Visual Studio Code版本1.26.1


3
在我的电脑上(Windows 10,VSCode 1.26.1),当外部修改一个文件时,如果在VSCode中没有更改,它将默默地重新加载该文件。但是,如果在VSCode中有更改,则不会发生任何事情,并且当我尝试保存该文件时,它会警告我存在冲突,并提供通过比较两个版本来解决冲突。无论files.useExperimentalFileWatcher的值是true还是false,这一切都会发生,我已经尝试过这两种情况,但没有看到任何区别。 - Fabio says Reinstate Monica
7
版本 1.28.2(1.28.2)Code -> Preferences -> Settings 并搜索 "watcher",勾选框即可。对我有效。 - Shanimal
2
该死,这在Linux上吃掉了大量的CPU。 - abhi1010
18
@WonJunBae,这个功能是用来做什么的?请对你所推荐的这个功能进行描述。 - 1.21 gigawatts
8
VSCode 1.41.1 上出现了未知的配置设置。 - Josh Correia
显示剩余5条评论

31

SUPER-SHIFT-p > File: Revert File 是唯一的方法。

(其中SUPER在Mac上是Command,在PC上是Ctrl)


2
不知道这是唯一的方法,但这确实是手动刷新文档的有效方法。 - PerpetualStudent
5
糟糕的命名! - EvgenyKolyakov
这个命名不好,@EvgenyKolyakov。它不仅仅是刷新文档,还会将其恢复到原始状态,对吧? - rokejulianlockhart

2

已弃用:

在Ubuntu上,使用vscode创建新文件后,只有在手动刷新资源管理器后才会显示出来。这真令人沮丧。我在settings.json中更改了一个键,之后一切都正常了:

"files.legacyWatcher": "on"

保存,重新启动 vscode,并保持安全 :)

1
Unknown Configuration Setting - Pedro Lobito

2
在2021年6月的1.57.1版本中,仍然没有像“检测文件在环境外被更改”的设置。但如果文件在外部意外更改,您可以通过撤销(Ctrl + Z)命令轻松恢复更改。

太好了,但你怎么能确定呢? - Jeff Wright

0
我不得不在首选项->设置中将自动保存选项设置为“onfocusChange”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接