2010-01-13 59 views
19

有很多次,我有一段代码,我想发布一个缺陷跟踪,维基,论坛等,但它在代码缩进深。我通常不得不突出显示代码段,点击< 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的()仍然在它前面的一个标签。

+0

@Roger:感谢您的评论。我重新提出了这个问题。 – User1 2010-01-13 22:33:16

回答

38

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

把自己在第一行的开头,C-空间,转到最后一行,你要删除的缩进的结束和CX[Rķ(矩形杀) 。这就是它。

+0

我不喜欢这种方法,因为空白是问题,你应该只删除空格,这种方法会删除该区域中的所有字符。 – 2010-01-13 22:45:26

+0

这是我一直这样做的方式。但我喜欢缩进严格的解决方案@ http://stackoverflow.com/questions/2060442/unindenting-code-snippets/2060803#2060803 – 2010-01-14 14:30:03

+1

我不得不阅读了几次才明白“去到最后一行和缩进的结尾“。现在矩形杀死是有道理的。如果只有emacs函数可以自动终止矩形,请将代码复制到剪贴板,然后撤消kill。 – User1 2010-01-14 15:17:37

-3

在六,它只是<<左移一个缩进宽度,所以对于unindent 10行,你会做10<<

0

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

在Emacs中:

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

在Vim中:

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

这只会删除每行上的前3个选项卡。所以第四或第五缩进将成为第一或第二缩进。 '^'字符表示“开始行”。 – 2010-01-13 21:45:55

+0

这并没有回答这个问题,除非你真的认为他应该从emacs复制文本,粘贴到vim中,修改并复制粘贴到其他地方,这似乎不是一个有用的答案。还需要统计不记名人数,当然还有更好的方法。 – 2010-01-13 22:00:16

+1

我没有注意到'emacs'标签,因此vim中的解决方案。添加一个emacs变体。 – 2010-01-13 22:33:58

13

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

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

您可以选择整个缓冲区:

CTRL + X^h

或者,如果你只是想简单地设置一个区域的标志CTRL + SPACE在那里你想要开始,然后导航到您想要结束的位置。

然后取出的空白,为10个空白字符做到这一点:

CTRL + - CTRL + XTAB


由于这是相当大的,我会为你分解它。

1)首先,我们得到负参数命令:

(负参数ARG)

KBD快捷:CTRL + -

2)接着供给的数值参数,在这种情况下数字10:

3)然后我们所说的缩进硬性命令

(缩进刚性地START END ARG)

大骨节病的快捷方式:CTRL + XTAB

那么什么我们正在做的是给命令的参数-10缩进 - 刚性,结果是10个空格字符将从每行的开始处被删除在这种情况下,我们选择了整个文档(CTRL + xh),因此将从整个文档的每一行的开头删除10行空格。

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

在您的例子,它看起来像你有大约30前导空格,所以这应该做的伎俩:

CTRL + - CTRL + XTAB

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

1

我Kedit(其中有做列编辑的能力)的使用方法是为了纪念第一列的第一个字符,并与Alt键行 - ,我的光标定位到最后一排和字符我想删除,Alt - B再然后替代 - G。它已经消失并且仍然具有除去已删除列的所有缩进。
在SQL Server中,更容易,标记块并按shift-tab,直到代码出现在我想要的位置。

1

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

6

如果您的emacs c样式设置正确,则只需突出显示该代码段并按C-M-\就会正确缩进(如果您处于C++模式下)。