一行完成代码折叠(并保持折叠标志一直可见)

时间:2021-07-02 14:34:44

标签: visual-studio-code copy-paste folding

VScode 中的代码折叠似乎不如 IntelliJ。

例如。代码块

def g(a):
    print(a)
    print(a)
    print(a)
    print(a)
    print(a)

或者,对于 (...),{...},[...](缩进实际上并不是真正的问题。)

例如来自 dart(flutter) 的代码示例:

OutlinedButton(
              onPressed: () {
                Navigator.pushNamed(
                  context,
                  SecondPage.id,
                );
              },
              child: Text("Page 2"),
            )
  1. 因此,现在如果我折叠此代码并尝试复制折叠线,它不会像在 IntelliJ 中那样复制整个折叠。是否有扩展或设置,我可以通过它实现与 IntelliJ 相同的功能?我发现一条评论说我需要复制到下一行的开头,这不是我想要的。 https://github.com/microsoft/vscode/issues/51232#issuecomment-395190470
  • 如果我在折叠后按 Enter 键,它会在折叠部分创建一条新线,我实际上希望它在折叠部分之后创建一条线。
  1. VScode 仅在我将鼠标悬停在其上时才显示折叠标志,我希望它始终可见。

2 个答案:

答案 0 :(得分:2)

我假设代码语言是 Python。

<块引用>

所以,现在如果我折叠这段代码并尝试复制折叠线,它不会像在 IntelliJ 中那样复制整个折叠

您需要选择整个区域。为此,只需执行 Shift+Down,然后您就可以复制/粘贴该区域。

<块引用>

如果我在折叠后按 Enter 键,它会在折叠部分创建一条新线,我实际上希望它在折叠部分之后创建一条线。

Python 的折叠区域基于缩进。因此,在折叠后按 Enter 时,新行会被制表,因此它位于区域内。您需要删除该选项卡,以便该行不在该区域内。

<块引用>

一行完成代码折叠

单行折叠,需要使用扩展名Explicit Folding和如下配置:

"[python]": {
    "explicitFolding.rules": [
        {
            "beginRegex": "\"\"\"",
            "endRegex": "\"\"\"",
        },
        {
            "indentation": true,
            "offSide": true
        }
    ]
}

答案 1 :(得分:1)

三分。其他人已经解决了两个问题,但为了完整起见,我将它们包括在此处,第三个是我自己的贡献。

  1. 从根本上说,Code 的哲学似乎是包含所有折叠代码的行的结尾似乎被视为折叠代码第一行的结尾,而不是所有折叠代码的结尾。折叠代码存在于相关代码的第一行开头和下一条可见行(折叠部分之后的第一行)的开始之间。因此:
  • 根据 daiyam 的回答,在折叠代码的开头按 Shift+Down 以选择它和下一个可见行之间的所有内容。这包括所有折叠的代码,然后您可以复制/粘贴这些代码。

  • 我自己的贡献在这里:同样,要在折叠代码后添加新行,要么从折叠代码行的开头按Down,要么从折叠代码行的末尾按Right该行,以到达下一行的开头。然后按 Enter 在那里添加一个新行。然后 Up 到达新行的开头。^^

  1. 根据 mark 的评论,将 Editor: Show Folding Controls 设置为 always

^^ 一些潜在的矫枉过正的分析? ...

是的,对于您习惯于在 IntelliJ 中一步完成的事情来说,这似乎是很多步骤,只是它只是额外的两次(箭头)按键。如果您从 IntelliJ 转向 Code,那么您的肌肉记忆可能会很快适应。如果您经常在它们之间来回切换,那可能只是一个问题。

此外,您最初为到达第一条折叠线的起点或终点所做的任何键或鼠标单击都可以替换为不同的单击或按键,以使您到达第一条折叠线的起点而是下一行。所以唯一额外的真的是 Up 之后的 Enter 键,加上(可能非常小)学习曲线要​​记住转到下一行开始而不是上一行结束。< /p>

我想如果这很重要,您可以使用任何宏应用程序将这些额外的箭头键和 Enter 组合到一个键击中(例如 Shift+Enter 或其他)。我发现自己做了很多这样的事情来使我对不同 IDE 等的使用保持一致。

只是一些想法,以防万一。