如何折叠Visual Studio Code for Windows中的代码部分?


770

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

是否支持此功能?

Answers:


1351

自Visual Studio Code 版本0.10.11开始,折叠就已经推出,并且现已实现。这些键盘快捷键可用:

  • Fold在光标处折叠最里面的未折叠区域:

    • CtrlWindows和Linux上的+ Shift+[
    • 在MacOS上+ +[
  • 展开展开光标处的折叠区域:

    • CtrlWindows和Linux上的+ Shift+]
    • 在MacOS上+ +]
  • Fold All折叠编辑器中的所有区域:

    • CtrlWindows和Linux上的+(K=> 0)(零)
    • 在MacOS上+(K=> 0)(零)
  • 全部展开将在编辑器中展开所有区域:

    • CtrlWindows和Linux上的+(K=> J
    • 在macOS上+(K=> J

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


2
@DouglasGaskell我犯了同样的错误。这是零而不是o,迈克尔·富尔顿的Fold Level回答对我来说更有意义。
丹·马歇尔

1
不知道它是Code版本问题,Windows版本问题还是其他问题,但是在我的PC上,它只能与Right-Ctrl一起使用。您可能要注意!
火星

6
它基本上是Ctrl + K,Ctrl + [n],其中n是要折叠到的级别编号。因此,如果您要查找VSCode上VS(C#)的Ctrl + M,Ctrl + O等效项,则为Ctrl + K,Ctrl + 3。
Yashash Gaurav

3
@ Preza8按下F1并输入折叠展开
AlexG

2
@ Preza8它还显示了当前分配的键绑定,如果未分配,则可以自己分配。另外,可能会有扩展程序来添加自定义GUI按钮
AlexG

222

从2017年4月的Visual Studio Code 1.12.0版开始,请参阅文档中的基本编辑>折叠部分。

默认密钥为:

全部折叠:CTRL+ KCTRL+ 0(零)

折叠等级[n]:CTRL+ KCTRL+ [n]*

全部展开:CTRL+ KCTRL+J

折叠区域:CTRL+ KCTRL+[

展开区域:CTRL+ KCTRL+]

*折叠级别:要折叠除最外面的类之外的所有类,请尝试CTRL+ KCTRL+1

Mac:使用而不是CTRL(感谢Prajeet)


它是否保存和恢复IDE启动/关闭之间的折叠状态?
格林

某些原因ctrl+k,ctrl+num仅适用于qwerty以上的数字而不适用于小键盘
MotKohn

2
折叠到[n]级不会折叠光标所在的部分。这总是让我认为它没有达到我的预期。是否可以关闭此行为?
罗恩·布莱克'18

92

v1.17提供了区域折叠代码的功能。按地区文件折叠。以及v1.191.23

[一般来说,你可以添加一个空格,比如// region and // endregion//region and //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

每种语言也都有可用于标记的摘录。输入“#”并调用代码完成功能以查看它们。要为您的语言配置区域标记,请与语言扩展提供商联系。

v1.23添加了CSS / SCSS / Less代码折叠区域:

CSS/SCSS/Less:         /* #region */ and /* #endregion */ or /*#region*/ and /*#endregion*/
SCSS/Less:             // #region and // #endregion

v1.35添加:

Go:                   // region, // endregion and // #region, // #endregion

v.1.36添加了shellscript,请参见[github问题:添加shellscript折叠标记]。4

shellscript:          # region and # endregion

v1.42添加了Perl5等(请参见https://github.com/microsoft/vscode-docs/commit/ec3e9d07724510eaf0c3b7200b09c9c22d3be7c3):

Perl5 #region and #endregion or =pod and =cut


v1.39增加了使用命令切换折叠的功能editor.toggleFold

默认情况下,它绑定到Ctrl+ K Ctrl+ L。请参阅https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_39.md#toggle-folding


1
// region并且// endregion不适用于VS Code 1.22版(尽管尚未测试低于或高于该版本的版本)。但是// #region// #endregion有效(请注意两者中的“#”和空格)。这样,如果启用了spaced-comment规则(即未设置为“ off”或0),则ESLint(如果正在使用)将不会显示错误。
ozanmuyes

在CSS中,它实际上是/* #region Foo Bar *//* #endregion */
toddmo

1
@ozanmuyes取决于文件类型(语言)。//region并且//endregion用于JavaScript。
lealceldeiro

如果您安装Microsoft的docker ext:marketplace.visualstudio.com/…
Robert Robert

v1.41:我尝试了XML并且它起作用了!<!-- #region --> elements <!-- #endregion -->。它在折叠部分的#region之后显示文本。即使有其他嵌套的嵌套,它也可以从当前#region正确折叠到相应的#endregion-就像任何等式中的括号一样。它记住嵌套区域的折叠设置。Ctrl + k + Ctrl + [和Ctrl + k + Ctrl +]正确关闭/打开光标处的折痕。(对我来说,这似乎有些倒退,但是如何)很棒的东西!
TonyG

73

此功能现在在标准版本中可用。要显示折叠/展开控件,您需要将鼠标悬停在行号右侧的区域上,如以下屏幕截图所示:

在此处输入图片说明


31

您应该添加用户设置:

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

到目前为止,“ editor.foldingStrategy”对我来说是最有用的提示。我正在编辑Liquid代码(Shopify),但无法折叠我的代码。一旦我从“自动”切换为“缩进”,VS Code就会查看缩进,而不是我使用的特定语言,这非常有帮助,谢谢
Benjamin

24

折叠/扩展的默认快捷方式是:

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 /打字稿上对我不起作用。
dcsan

1
请查看以下内容:ctrl+shift+alt+[ "Unfold all"您写的[不是]。如果我错了,请纠正我。
fWd82 '17

@dcsan在python / linux中对我也不起作用。Ctrl + K,Ctrl + 0(零)和Ctrl + K,Ctrl + J确实可以按照接受的答案工作
清晰的

它不起作用
KansaiRobot

19

如果所有快捷方式都不起作用(对我而言),作为一种解决方法,您还可以打开命令面板(Ctrl+ 3或查看->命令面板...)并输入fold all

在此处输入图片说明


我想我想出会发生什么...仅当有[+]可用时,它才会折叠块,例如在python中,它不会折叠以下内容:github.com/heldersepu/GMapCatcher/blob/master/gmapcatcher / ...
Helder Sepulveda,

@HelderSepulveda好吧,它应该折叠块注释,但是python没有这些注释。您链接的代码使用多个单行注释。
Jorn Vernee

16

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

ctrl+ k+ 1:namspace

ctrl+ k+ 2:类

ctrl+ k+ 3:方法

ctrl+ k+ 4:块

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

ctrl+ k+ j:展开


12

发行版1.0现在支持折叠:

源代码折叠快捷方式

有一些新的折叠动作可以根据源代码区域的折叠级别折叠它们。

有行动折叠级别1(Ctrl+ K Ctrl+ 1)至5级(Ctrl+ K Ctrl+ 5)。要展开,请使用全部展开(Ctrl+ Shift+ Alt+ ])。

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

我在查找]键盘上的按钮时遇到了问题(挪威布局),在我的情况下是Å按钮。(或者从退格按钮开始,向左两个按钮,向下一个按钮。)



4

从1.3.1版(2016-07-17)开始,块折叠更加方便。

紧随其后的任何行都将带有“-”字符以允许折叠。如果该块已折叠,则将替换为“ +”字符,这将打开折叠的块。

Ctrl+ Shift+ Alt+ ])仍会影响所有块,将一级关闭。每次重复使用将关闭一个级别。(Ctrl+ Shift+ Alt+ [)以相反的方式工作。

万岁,方块坍塌终于有用了。


除此之外,如果您对代码区域的注释超出范围,则可以使用注释在代码中构建自定义区域并折叠整个自定义段!很棒的功能!
Tim Cederquist

从2019年7月13日起这无效。是否有其他keboard快捷方式替代了它?(一次合拢/扩展一个级别?{
马丁

3

编辑器内部的代码折叠控件可扩展XML结构的文档的节点以及VsCode中的源代码

这里没有技术提示,只需简单地调整VsCode的首选项即可。

通过转到“首选项”并搜索“折叠”,我设法始终在VsCode中显示代码折叠控件。现在,只需选择始终显示这些控件即可。这与我测试过的Angular 8解决方案中的Typescript代码和模板的HTML一起使用。

已在Windows 10 OS上运行的VsCode Insiders 1.37.0中对此进行了测试。

始终在VsCode中显示代码折叠控件


3

v1.42对折叠的外观和功能进行了一些改进。参见https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_42.md#folded-range-highlighting

折叠范围突出显示

由于所有折叠范围的背景颜色,现在更容易发现折叠范围。

折叠高光

折叠突出显示颜色主题:深色+

该功能由设置editor.foldingHighlight控制,颜色可以使用color editor.foldBackground自定义。

"workbench.colorCustomizations": { "editor.foldBackground": "#355000" }

折叠精致

Shift + Click折叠指示器上的只会首先折叠内部范围。Shift + Click再次(当所有内部范围都已折叠时)也将折叠父级。Shift + Click再次展现了一切。

折移式点击

editor.fold已经折叠的范围上使用Fold命令(kb())]时,下一个展开的父范围将被折叠。


2

在Mac上,它是RHS Command键K,而不是代码折叠命令的左侧。

否则,左Command键将删除当前行K




0

我希望Visual Studio Code可以处理:

#region Function Write-Log
Function Write-Log {
    ...
}
#endregion Function Write-Log

现在,Visual Studio Code只会忽略它,不会将其折叠。同时,Notepad ++和PowerGUI可以很好地处理此问题。

更新:我刚刚注意到Visual Studio Code的更新。现在支持!


0

注意:这些快捷方式仅在您编辑keybindings.json时才能按预期工作

我对默认的快捷方式不满意,我希望它们按以下方式工作:

  • 折:Ctrl+ Alt+]
  • 递归折叠:Ctrl+ ⇧ Shift+ Alt+]
  • 全部折叠:Ctrl+ k然后Ctrl+]
  • 展开:Ctrl+ Alt+[
  • 递归展开:Ctrl+ ⇧ Shift+ Alt+[
  • 全部展开:Ctrl+ k然后Ctrl+[

进行设置:

  • 开启Preferences: Open Keyboard Shortcuts (JSON)Ctrl+ ⇧ Shift+ p
  • 将以下代码段添加到该文件中

    已经具有用于折叠/展开的自定义按键绑定了吗?然后,您需要更换它们。

    {
        "key": "ctrl+alt+]",
        "command": "editor.fold",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+alt+[",
        "command": "editor.unfold",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+shift+alt+]",
        "command": "editor.foldRecursively",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+shift+alt+[",
        "command": "editor.unfoldRecursively",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+k ctrl+[",
        "command": "editor.unfoldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+k ctrl+]",
        "command": "editor.foldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.