有些时候,我有一个代码片段,我想在缺陷跟踪器,维基,论坛等上发布,但它在代码中有很深的缩进。我通常需要突出显示代码段,点击< 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 :(得分: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<<
。