不受限制的代码片段

时间:2010-01-13 21:34:46

标签: emacs tabs

有些时候,我有一个代码片段,我想在缺陷跟踪器,维基,论坛等上发布,但它在代码中有很深的缩进。我通常需要突出显示代码段,点击< shift> - < tab>直到缩进不是那么糟糕,然后复制/粘贴然后还原代码。这有点痛苦。

是否有工具可以移除每行前面的标签?请注意,我不想删除所有行中的所有选项卡,只是从每行中删除相同的前一个选项卡。我在想Emacs的一些功能可以做到这一点。

这是一个极端的例子:

在:

                            //This is usually some method in an anonymous inner class' anonymous inner class.
                            @Override
                            public void method(){
                                doSomething();
                            }

后:

//This is usually some method in an anonymous inner class' anonymous inner class.
@Override
public void method(){
    doSomething();
}

注意doSomething()如何在它前面只有一个标签。

8 个答案:

答案 0 :(得分:40)

矩形选择是我这样做的首选方式。

将自己置于第一行的开头, C-space ,转到最后一行,并删除要删除的缩进的结尾 Cx < kbd> r k (矩形杀戮)。就是这样。

答案 1 :(得分:13)

在Emacs中执行此操作的实际方法是使用此组合键。

首先选择要从中删除标签的部分。

您可以选择整个缓冲区:

CTRL + x h

或者,如果您只想要一个区域,只需将标记 CTRL + SPACE 设置为您要开始的位置,然后导航到您要结束的位置。

然后删除空格,对于10个空格字符执行此操作:

CTRL + - 1 0 CTRL + x < / kbd> TAB


由于这个很大,我会为你分解。

1)首先我们给出否定参数命令:

(负面论据ARG)

kbd快捷方式: CTRL + -

2)接下来提供数值参数,在本例中为数字10:

1 0

3)然后我们调用indent-rigidly命令

(缩进刚刚开始ARG)

kbd快捷方式: CTRL + x TAB

所以我们正在做的是给命令-10的参数进行缩进 - 结果是10个空白字符将从我们选择的每一行的开头删除,在这种情况下我们有选择整个文档( CTRL + x h ),因此将从整个文档的每一行的开头删除10行空格。

如果某个特定行的空格少于10个,那么它只会删除尽可能多的空格,如果有超过10个空格,则可能会在完成后留下一些空格。

在你的例子中,看起来你有大约30个前导空格,所以这应该可以解决问题:

CTRL + - 3 0 CTRL + x < / kbd> TAB

如果您想要删除更多数字,请尝试使用更大的数字。

答案 2 :(得分:7)

如果您的emacs c样式设置正确,那么只需突出显示该代码段并按C-M-\即可正确缩进(如果您使用的是c ++模式)。

答案 3 :(得分:1)

我在Kedit中使用的方法(能够进行列编辑)是用 Alt - B 标记第一列和第一行的第一个字符,将我的光标定位到我要移除的最后一行和字符,再次 Alt - B 然后 Alt - G 。它已经消失,并且仍然具有除去已删除列之外的所有缩进 在SQL Server中,它更容易,标记块并按shift键,直到代码到达我想要的位置。

答案 4 :(得分:1)

如果您确切地知道每行的前缀有多少(如您所述),您可以使用简单的query-replace-regex"^\t\t\t...\t"替换为""

答案 5 :(得分:1)

我认为最简单的答案。 。到联合国缩进选定区域4:

C-u -4 C-x TAB

这是带有负参数的简单区域缩进命令。 例如,这个缩进区域由一个:

C-x TAB

https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html

答案 6 :(得分:0)

使用正则表达式删除前导空格。

在Emacs中:

C-M-%^<TAB><TAB><TAB><ENTER><ENTER>!

在Vim:

:%s/^\t\t\t//g

答案 7 :(得分:-3)

在vi中,只有<<左移一个缩进宽度,所以对于10行,你会10<<