有没有办法修复 Sublime Text 3 中的多行缩进,以便它在选择中添加第一行的缩进字符?

有没有办法修复 Sublime Text 3 中的多行缩进,以便它在选择中添加第一行的缩进字符?

当我在 Sublime Text 3 中选择多行并将它们缩进为一个块(使用 或Tab+ Ctrl)时],它会在第一行的开头添加新的空格字符外部选择而不是内部。

假设我有一段如下所示的代码块(注意:以下所有内容仅用于说明这个想法;请不要向我询问我的括号在哪里,或者我的缩进量是多少等):

int firstVar, secondVar;

firstVar = 4;
secondVar = 11;

现在,我稍后再回到此代码,并需要使值分配有条件:

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
}

当然,我希望很好地缩进它,因此我选择if子句中的两个项目并将它们作为一个块缩进,使用Tab键,而 Sublime Text 会按预期在每个选定的行前面添加缩进字符(制表符或预定数量的空格):

[snip]

if (result == GOOD_RESULT)
{
  firstVar = 4;
  secondVar = 11;
}
else
{
}

然后,因为我将在子句中为它们分配不同的值else,所以我将它们复制并粘贴到那里,准备修改:

if (result == BAD_RESULT)
{
  firstVar = 4;
  secondVar = 11;
}
else
{
firstVar = 4;
  secondVar = 11;
}

问题就在这里:Sublime Text 缩进了我的块的第一行,但是所选内容中未包含缩进字符,所以当我复制粘贴它时,我没有得到第一行的缩进。(我希望我可以改变背景颜色以更好地说明。)

不仅如此,如果我并粘贴它,缩进字符就会被留下。

我可以通过在缩进之前记住复制/剪切来解决这个问题,但是 a) 我永远记住并且 b)然后我必须缩进代码两次。

有谁知道如何解决这个问题吗?

答案1

在 Sublime 3 中,有一个名为 的命令Paste and Indent,该命令的键盘命令是操作系统的主命令键。这似乎可以解决问题Super + shift + VSuper

我在这里找到了它:https://gist.github.com/eteanga/1736542


编辑:原始海报添加了更多信息,因此人们不必尝试解析评论。

回到原问题的第二步:

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
}

我选择第一组括号之间的两行(分配给firstVar和的赋值secondVar,复制它们(Ctrl+ C),然后在第二组括号之间添加一个空行并将光标放在空白行的开头(由下面的|, 表示):

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
|
}

然后我“粘贴并缩进”(++ Ctrl),代码将使用文件类型的默认缩进进行粘贴,以便我可以进行更改。(此外,如果我粘贴了更多行,并且缩进级别不同,它们都会进行相应的调整。)ShiftV

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
  firstVar = 4;
  secondVar = 11;
|
}

不幸的是,它还留下了一个额外的空白行(因为如果我没有添加额外的行,它根本不会缩进),但这很容易删除。

(所以,很遗憾,仍然不如多行缩进正常工作,因为我必须先创建然后销毁一个空白行。你说只需要多按两次键?当然,但如果多行缩进正常工作,我就不需要按两次键了,而且这会打断我的自然流程,所以我必须考虑而不是我试图进行的代码更改。

(或者,我可以取消选择最后一行末尾的换行符,方法是按下并继续按住Shift,然后我只需要创建一个新行,但不要在粘贴后删除一行。但与添加和删除额外的空白行相比,这是一个更不自然的事情或思考,并且它仍然需要额外按两次键。

(所以无论如何,此功能是一种解决方法,而不是修复方法,即使它是一个有趣甚至很酷的功能。)

但是,如果括号内已经有几行文本(由于不需要将新代码粘贴到最后一个括号之前,因此这种方法效果很好:您不必添加空行,只需将光标放在要插入新代码的行首,然后按Ctrl+ Shift+V即可。插入的行将具有与周围环境匹配的缩进。

此外,您不一定非要使用默认缩进。如果您将光标放在某个任意列上(左侧只有空格),则“粘贴并缩进”命令将缩进您粘贴到该列的所有内容。(如果您在光标右侧有文本的行上执行此操作,则该行的缩进将更改为与您粘贴的内容相匹配。)

正如我所说,这是一个有趣且相当酷的功能,绝对值得一试和了解。值得成为这个问题的公认答案。但仍然不是相当就像使多行缩进正常工作一样好。:)

答案2

我相信这不是错误,而是正常现象,所以我没有修复方法。相反,我有一个解释和一个建议的用例。

发生这种情况的原因是您没有复制缩进。

你做这个:

选择不缩进

在复制之前,您还必须选择该空间。这可以通过两种方式轻松完成:

  1. 双击该行的缩进部分开始选择。这将选择所有内容,就像选择一个单词(由空格组成)一样。它还有一个优点,即选择会按单词而不是字符进行更改。

    选择包括缩进

  2. 从上一行的末尾开始选择

    选择上一行

相关内容