PhpStorm 自动打开某文件就卡死 —— 手动解决办法
现象:已知某个文件(或"当前打开的第一个标签")一被自动打开,PhpStorm 就整个界面冻死。
原因:该文件被记成了项目的"已打开标签",每次开项目自动恢复打开它就卡死。
解决:不动源文件,只删掉 IDE 里"自动打开它"的记录。以下全部在PowerShell(管理员或普通用户均可)里执行。
—
第 1 步:结束假死进程
Stop-Process-Name phpstorm64,fsnotifier64-Force第 2 步:找出记录该文件的状态文件
把下面命令里的文件名换成实际名字(如inux.py):
Select-String-Path(Get-ChildItem"$env:USERPROFILE\.<IDE名><版本>\config\workspace"-Recurse)-Pattern"文件名"-ErrorAction SilentlyContinue记下命中的 xml 路径,形如:C:\Users\用户名\.PhpStorm2019.2\config\workspace\abc123.xml
IDE 名版本举例:PhpStorm 2019.2 → 目录名
.PhpStorm2019.2;其他 JetBrains IDE 同理(.IntelliJIdea2023.2等)。
第 3 步:备份并删除该文件的两处引用
把下面命令里的路径换成第 2 步记下的 xml 路径,文件名换成实际名字:
$xml="路径"Copy-Item$xml($xml+".bak")# 先备份$doc=New-ObjectSystem.Xml.XmlDocument;$doc.Load($xml)$nodes=$doc.SelectNodes("//*[@file[contains(., '文件名')]]")$toRemove= @()foreach($nin$nodes){if($n.LocalName-eq'file'){$toRemove+=$n}elseif($n.LocalName-eq'entry'){if($n.ParentNode.LocalName-eq'file'){$toRemove+=$n.ParentNode}else{$toRemove+=$n}}}foreach($rin$toRemove){[void]$r.ParentNode.RemoveChild($r)}$doc.Save($xml)删完可再跑第 2 步确认命中数为 0,即清理干净。
第 4 步:重新启动 PhpStorm
正常启动后项目不再自动打开该文件,卡死消失。
注意
- 源文件一个字节都不动,只改 IDE 状态。
- 改坏可用第 3 步生成的
.bak把 xml 还原。 - 关掉该文件再退出 IDE,可避免下次又被记成打开标签。