如何在Visual Studio Code中折叠代码段?

1369
如何在Visual Studio Code中折叠或折叠代码部分?
这个功能支持吗?
28个回答

2311

折叠功能已经推出并自Visual Studio Code 0.10.11版本开始实现。以下是可用的快捷键:

  • 折叠 折叠光标所在的最内层未折叠区域:

    • 在 Windows 和 Linux 上按 Ctrl + Shift + [
    • 在 macOS 上按 + + [
  • 展开 展开光标所在的折叠区域:

    • 在 Windows 和 Linux 上按 Ctrl + Shift + ]
    • 在 macOS 上按 + + ]
  • 全部折叠 折叠编辑器中的所有区域:

    • 在 Windows 和 Linux 上按 Ctrl + K, Ctrl + 0(数字零)
    • 在 macOS 上按 + K, +0(数字零)
  • 全部展开 展开编辑器中的所有区域:

    • 在 Windows 和 Linux 上按 Ctrl + K, Ctrl + J
    • 在 macOS 上按 + K, + J

参考资料: https://code.visualstudio.com/docs/getstarted/keybindings


5
我犯了同样的错误。这是数字0而不是字母o,迈克尔·富尔顿的“折叠水平”答案对我来说更有意义。 - Dan Marshall
3
不知道是代码版本问题、Windows 版本问题还是其他问题,但在我的电脑上只有右 Ctrl 键有效。你可能需要注意这一点! - Mars
51
基本上是 Ctrl+K,Ctrl+[n],其中 n 是你想折叠的级别数。因此,如果你在寻找与 VS(C#)上的 Ctrl+M,Ctrl+O 相当的等价快捷键,在 VSCode 中将是 Ctrl+K,Ctrl+3。 - Yashash Gaurav
15
@Preza8 按下 F1 键,然后输入 折叠展开 - AlexG
3
如果目前没有指定按键,则它还会显示当前分配的按键,您可以将其分配给自己。此外,可能会有一个扩展程序可添加自定义GUI按钮。 - AlexG
显示剩余11条评论

346
自 Visual Studio Code 版本 1.12.0(2017 年 4 月)起,请参阅文档中的“基本编辑”>“折叠”部分,详情请见此处
默认键如下:
折叠全部: CTRL+K, CTRL+0(数字零)
折叠级别 [n]: CTRL+K, CTRL+[n]*
展开全部: CTRL+K, CTRL+J 折叠区域: CTRL+K, CTRL+[ 展开区域: CTRL+K, CTRL+] * 折叠级别:要折叠除最外层类以外的所有内容,请尝试使用 CTRL+K, CTRL+1
注:Mac 用户请使用 替代 CTRL(感谢 Prajeet)。

1
它是否保存和恢复IDE启动/关闭之间的折叠状态? - Green
2
某些原因 ctrl+k,ctrl+num 只适用于 qwerty 键盘上的数字,而不适用于数字键盘。 - MotKohn
4
折叠到第 [n] 级不会折叠光标所在的部分。这总让我觉得它没有按预期工作。是否有选项可以关闭这种行为? - RonnBlack
Ctrl+K 删除整行。 - towry
niceee broooo!!!!!! - Vesper
没错,亲,你懂的。 - undefined

191

此外,从Insiders v1.70开始,看到了折叠任意代码行的能力。也就是说,您选择的任何行都可以被折叠起来!

有关命令和演示,请参见https://dev59.com/bFcP5IYBdhLWcg3worn_#72954133

从选择创建手动折叠范围
editor.createFoldingRangeFromSelection

这绑定到上面的创建命令:Ctrl+K Ctrl+,

删除手动折叠范围
editor.removeManualFoldingRanges

这绑定到上面的删除命令:Ctrl+K Ctrl+.


v1.17引入了按区域折叠代码的功能。按区域折叠文档。还有v1.191.23

[一般来说,您可以添加一个空格,例如// region 和 // endregion//region 和 //endregion,它也可以工作。]

TypeScript/JavaScript: //#region and //#endregion or // #region and // #endregion
C#:                    #region and #endregion
C/C++:                 #pragma region and #pragma endregion
F#:                    //#region and //#endregion
PowerShell:            #region and #endregion
Python:                #region and #endregion
VB:                    #Region and #End Region
PHP:                   #region and #endregion
Bat:                   ::#region and ::#endregion or REM #region and REM #endregion
Markdown:              <!-- #region --> and <!-- #endregion -->
Golang                 //region and //endregion or //#region and //#endregion
Java                   //#region and //#endregion
CSS/SCSS/Less:         /* #region */ and /* #endregion */ or /*#region*/ and /*#endregion*/
SCSS/Less:             // #region and // #endregion
Go:                    // region, // endregion and // #region, // #endregion
shellscript:           # region and # endregion
Perl5                  #region and #endregion or =pod and =cut  
sql                    --#region and --#endregion

重要提示:如果您在列表中没有看到您的语言::

每种语言都有可用于标记的代码片段。键入“#”并调用代码完成以查看它们。要为您的语言配置区域标记,请联系语言扩展提供者。

因此,键入#,然后按Ctrl+Space,即可查看任何语言的区域标记。



3
在VS Code版本1.22中,// region// endregion无法正常工作(尚未测试低于或高于该版本的版本)。但是,// #region// #endregion可以使用(请注意两者都带有 '#' 和空格)。这样,如果启用了ESLint(如果您正在使用),它就不会显示spaced-comment规则的错误(即未设置为'off'或0)。 - ozanmuyes
2
在CSS中,实际上是这样的 /* #region Foo Bar *//* #endregion */ - toddmo
1
@ozanmuyes 这取决于文件类型(语言)。//region//endregion 适用于 JavaScript。 - lealceldeiro
如果您安装了Microsoft的Docker扩展程序,它也可以在Docker .yaml文件中很好地工作: https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker - Robert
@Robert,你能发布一个在Dockerfile中使用#region的示例吗?谢谢。 - Sam
显示剩余2条评论

94

现在,这个功能已经在标准构建中可用。要显示折叠/展开控件,您需要将鼠标悬停在行号右侧区域,如此屏幕截图所示:

输入图片描述


1
问题是,如何同时折叠所有部分,而不是一个接一个地折叠。有没有一种方法可以在不使用快捷键的情况下完成它? - ttfreeman
您必须使用快捷方式。 - BraveNewMath
我希望能够从代码块的末尾折叠大型代码块。我的一些代码块有几百行,为了折叠它们,我首先必须向上滚动。 - undefined

74

ctrl + k + 0 :折叠所有级别(命名空间,类,方法,块)

ctrl + k + 1 :命名空间

ctrl + k + 2 :类

ctrl + k + 3 :方法

ctrl + k + 4 :块

ctrl + k + [] :当前光标所在块

ctrl + k + j :展开


2
实际上是一对按键组合,而不是单个组合。例如:CTRL + KCTRL + 0(不是 CTRL + K + 0)。在描述按键组合序列时的惯例是将同时按下的键用加号表示,然后用逗号表示序列组合。 - Suncat2000
这些命令按照描述的方式工作。 - Scoop561
3
只有在命名空间位于第1级、类位于第2级、方法位于第3级等情况下,这些才能起作用……它通过缩进级别进行折叠,而不是按“类型”进行。 - Spok

72

你应该添加用户设置:

{
    "editor.showFoldingControls": "always",
    "editor.folding": true,
    "editor.foldingStrategy": "indentation", 
}

8
"editor.foldingStrategy" 对我来说是最有帮助的提示。我正在编辑 Liquid 代码(Shopify),之前无法折叠代码。一旦从“auto”切换到“indentation”,VS Code 就会查看缩进而不是具体的语言,非常有帮助,谢谢。 - Benjamin
1
这样做的额外好处是鼓励开发人员遵守整洁的代码规范!肮脏的代码?那你就得忍受自己的污秽,我的朋友。 - ingernet

36

默认的折叠/展开快捷键为:

Ctrl + Shift + [ :"折叠"

Ctrl + Shift + Alt + [ :"全部折叠"

Ctrl + Shift + ] :"展开"

Ctrl + Shift + Alt + ] :"全部展开"

或者您可以去keybindings.json更改按键绑定。

例如:

{
    "key": "cmd+k cmd+m",
    "command": "editor.foldAll",
    "when": "editorFocus"
},
{
    "key": "cmd+m cmd+k",
    "command": "editor.unfoldAll",
    "when": "editorFocus"
},

这个限制只适用于某些语言吗?在我的OSX/TypeScript上无法工作。 - dcsan
1
请检查一下:ctrl+shift+alt+[ "展开全部"你写成了 [ 而不是 ]。如果我错了,请纠正我。 - fWd82
@dcsan 在我的 Python/Linux 上也不管用。但是 Ctrl+K,Ctrl+0(零)以及 Ctrl+K,Ctrl+J 是有效的,就像被采纳的答案中所述。 - cleary
3
对于非美国键盘[]位于退格键()的左侧。 - CPHPython
1
@CPHPython 谢谢你。也许微软应该改变他们的键绑定备忘单,例如:https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf - Johan

34

如果没有任何快捷键可用(就像我的情况一样),您可以使用以下解决方法:打开命令面板(Ctrl + 3 或 View -> Command Palette...),然后输入fold all

图片描述


我想我弄清楚了发生了什么......它只在有[+]可用的情况下折叠块,在Python中例如它不会折叠以下内容:https://github.com/heldersepu/GMapCatcher/blob/master/gmapcatcher/pyGPSD/gpsd.py - Helder Sepulveda
@HelderSepulveda 嗯,据说它会折叠块注释,但 Python 没有这些。你分享的代码使用了多个单行注释。 - Jorn Vernee

14

1.0版本中,现在支持折叠功能:

源代码折叠快捷键

新增了一些折叠操作,根据代码块的折叠级别来折叠源代码区域。

有折叠级别1(Ctrl+K Ctrl+1)到级别5(Ctrl+K Ctrl+5)的折叠操作。要展开,请使用“全部展开”(Ctrl+Shift+Alt+])。

级别折叠操作不适用于包含当前光标的区域。

我曾经遇到过一个问题,无法在我的键盘上(挪威布局)找到]按钮,而在我的情况下是Å按钮。(或者是从退格键开始向左移两个按钮再向下移一个按钮。)


14

使用 JavaScript:

//#region REGION_NAME
   ...code here
//#endregion

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