![有没有办法修复 Sublime Text 3 中的多行缩进,以便它在选择中添加第一行的缩进字符?](https://linux22.com/image/1427196/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E4%BF%AE%E5%A4%8D%20Sublime%20Text%203%20%E4%B8%AD%E7%9A%84%E5%A4%9A%E8%A1%8C%E7%BC%A9%E8%BF%9B%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%AE%83%E5%9C%A8%E9%80%89%E6%8B%A9%E4%B8%AD%E6%B7%BB%E5%8A%A0%E7%AC%AC%E4%B8%80%E8%A1%8C%E7%9A%84%E7%BC%A9%E8%BF%9B%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
当我在 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 + V
。Super
我在这里找到了它: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即可。插入的行将具有与周围环境匹配的缩进。
此外,您不一定非要使用默认缩进。如果您将光标放在某个任意列上(左侧只有空格),则“粘贴并缩进”命令将缩进您粘贴到该列的所有内容。(如果您在光标右侧有文本的行上执行此操作,则该行的缩进将更改为与您粘贴的内容相匹配。)
正如我所说,这是一个有趣且相当酷的功能,绝对值得一试和了解。值得成为这个问题的公认答案。但仍然不是相当就像使多行缩进正常工作一样好。:)