PhpStorm作为一款专业的PHP集成开发工具,代码折叠是日常使用频率非常高的功能。一个动辄几百行的控制器类,如果能把不关注的私有方法暂时折叠起来,屏幕利用率会明显提高。不过默认的折叠快捷键在不同操作系统上键位并不相同,而且有些按键组合还容易和系统快捷键或者其他软件冲突,所以学会查看和自定义这些快捷键,是提升编码舒适度的一个小但实用的技巧。这篇文章会从默认键位讲起,带你完整走一遍自定义流程。

一、PhpStorm默认的折叠展开快捷键有哪些
在动手改键位之前,先了解一下默认配置。Windows和Linux系统下,PhpStorm折叠当前光标所在代码块的快捷键是Ctrl + 减号(-),展开是Ctrl + 加号(+)。如果你用的是Mac,对应的组合键则是Command + 减号和Command + 加号。这两个是最基础的操作,几乎每天都会用到。
除了折叠和展开单个代码块之外,还有几个同样常用的批量操作。全部折叠当前文件的快捷键是Ctrl + Shift + 减号,全部展开则是Ctrl + Shift + 加号,Mac上把Ctrl换成Command即可。另外还有一个递归折叠(Fold Selection / Remove from Folded),可以把选中区域内所有可折叠的结构一次性折叠掉,适合处理大段配置数组或者注释。
需要注意的一点是,不同版本的PhpStorm在默认Keymap上可能有细微差别。如果你安装时选择了Eclipse或者VS Code风格的Keymap预设,那么默认键位会跟着变化。可以在Settings - Keymap页面顶部的下拉框中确认当前使用的是哪套预设,确认无误后再记忆键位,避免按照网上的教程操作却发现按键没反应。
二、如何自定义折叠展开的快捷键
自定义键位的入口在设置面板中。点击菜单栏的File - Settings(Mac上是PhpStorm - Preferences),也可以直接用快捷键Ctrl + Alt + S打开设置窗口。在左侧搜索框中输入keymap,即可定位到快捷键管理页面。
接下来在Keymap页面右侧的动作搜索框中输入fold,会出现一系列和折叠相关的动作,常用的包括以下几个:
- Fold Current Selection:折叠当前选中的内容
- Unfold Current Selection:展开当前折叠的内容
- Collapse Current Region:折叠光标所在的代码区域
- Expand Current Region:展开光标所在的代码区域
- Collapse All:折叠整个文件的所有区域
- Expand All:展开整个文件的所有区域
找到想修改的动作后,双击该动作(或者右键选择),在弹出菜单中选择Add Keyboard Shortcut,然后在弹出的输入框中直接按下你想要绑定的新按键组合,点击OK保存即可。如果按下的新键位已经被其他动作占用,PhpStorm会给出冲突提示,并显示当前占用该键位的动作名称,你可以选择移除旧绑定或者换一个组合。也可以给同一个动作绑定鼠标快捷键,不过对于折叠这类高频操作,键盘组合仍然是效率最高的方式。
建议修改完成后不要急着关窗口,先随便打开一个PHP文件测试一下新键位是否生效。如果按键无效,多半是和输入法热键、显卡驱动控制面板或者系统全局快捷键撞车了,下面的小节会具体讲排查方法。
三、快捷键不生效的常见原因和解决办法
第一种常见情况是系统或第三方软件抢占按键。Windows上一些笔记本的Ctrl + 加号/减号会被显卡驱动或者浏览器缩放功能占用,Linux下则经常是Fcitx输入法的翻页键冲突。解决办法很简单,换一组冷门的组合,比如把折叠改成Alt + [和Alt + ],这类按键很少被其他程序占用。
第二种情况是Keymap预设被切换导致键位失效。有些人在安装插件或者导入别人的配置后,Keymap预设从Default变成了别的方案,之前记住的快捷键自然全部变了。遇到这种问题,回到Keymap页面顶部的预设下拉框,切回自己熟悉的方案,或者干脆基于当前方案另存一份自己的Keymap,这样以后不管怎么折腾插件,键位都不会乱。
第三种情况是Mac上的Function键行为问题。如果你的快捷键涉及F1到F12,需要检查系统偏好设置 - 键盘中的将F1、F2等键用作标准功能键选项是否勾选状态符合预期,否则按下Fn相关组合时实际发送的键值和PhpStorm监听的不一致,也会表现为快捷键失灵。
最后再分享一个实用技巧:PhpStorm支持在PHPDoc注释、HTML块、数组等结构上使用折叠,配合Settings - Editor - General - Code Folding中的默认折叠策略,可以让文件打开时自动收起导入语句和长注释,再配合自定义好的展开快捷键按需查看,编辑器界面会清爽很多。把这套设置调整到位之后,无论是浏览上千行的遗留代码还是自己写新模块,效率都会有一个明显的提升。