【问题标题】:Finish code folding in one line (and keep folding sign visible all the time)在一行中完成代码折叠(并始终保持折叠标志可见)
【发布时间】:2021-09-14 12:22:44
【问题描述】:

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,请参阅设置 Editor: Show Folding Controls 设置为 always
  • 对于#1,这似乎是不可能的。有一个关于它的问题,请查看这里,github.com/microsoft/vscode/issues/3352

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


【解决方案1】:

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

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

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

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

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

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

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

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

只是一些想法,以防万一他们有帮助。

【讨论】:

    【解决方案2】:

    我假设代码语言是 Python。

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

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

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

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

    一行代码折叠完成

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

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

    【讨论】:

    • 这实际上并没有在一行中完成折叠。但是,我感谢您的建议。
    • @Cyber​​ Avatar,我认为这与您的代码无关,因为它似乎是基于缩进而不是基于语法,但如果不是这样,我第二次 daiyam 的显式折叠建议(注意他是该扩展的作者,所以如果你愿意,你可以和他一起改进它)。我用它来解决 Code 最烦人的折叠问题(折叠不消耗括号/标签语言中的最后一行)。有时需要进行一些配置,具体取决于需要,但是当你做对了它会很有效。
    • 嗯,我在这里进一步添加了信息,github.com/zokugun/vscode-explicit-folding/discussions/... python 缩进并不是唯一的问题,我还更新了 OP。
    猜你喜欢
    • 2011-07-23
    • 2012-01-06
    • 2016-10-26
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多