在一行中完成代码折叠(并始终保持折叠标志可见)



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

例如。代码块

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

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

例如飞镖的代码样本(颤动):

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只在我将鼠标悬停在上面时显示折叠符号,我希望它始终可见

我假设代码语言是Python。

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

您需要选择整个区域。要做到这一点,只需执行Shift+Down,然后就可以复制/粘贴区域。

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

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

在一行中完成代码折叠

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

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

三点。其他人已经提到了两个,但为了完整起见,我将把它们包括在这里,第三个是我自己的贡献。

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

  • 我自己的贡献是:类似地,要在折叠的代码后面添加新行,可以从折叠的代码行的开头按Down,也可以从该行的末尾按Right,到达下一行的开头。然后按Enter在那里添加新行。然后Up到达新行的开头。^^

  1. 根据标记的注释,将Editor: Show Folding Controls设置为always

^一些潜在的过度杀伤分析

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

此外,无论你在第一个地方用什么键或鼠标点击来到达第一条折叠线的开始或结束,都可以用不同的点击或按键来代替,让你到达下一行的开始。因此,唯一额外的是Enter之后的Up键,加上(可能相当小的)学习曲线,以记住转到下一行的开始,而不是前一行的结束

我想,如果这是一件大事,你可以使用任何宏应用程序将这些额外的箭头键和Enter组合成一个键(比如Shift+Enter或其他什么)。我发现自己经常做这种事情,以使我对不同IDE等的使用保持一致。

只有几个想法,以备不时之需

最新更新