如何在Vi中修复整个文件的缩进?

时间:2009-02-03 05:15:25

标签: vim vi indentation

在Vim中,纠正所有行缩进的命令是什么?

我经常会将代码复制并粘贴到远程终端中,并将整个事情搞砸了。我想一举解决这个问题。

17 个答案:

答案 0 :(得分:1144)

=,缩进命令可以采取动作。因此,gg要获取文件的开头,=要缩进,G到文件的末尾,gg=G

答案 1 :(得分:119)

在粘贴到终端之前,请尝试:set paste(然后在完成后再:set nopaste)。这将关闭搞乱粘贴的自动缩进,换行等功能。

编辑:另外,我应该指出,通常可以通过使用外部程序获得比=缩进更好的结果。例如,我一直运行:%!perltidy。也可以使用astyle,cindent等。当然,您可以将它们映射到按键 - 并根据文件类型将不同的按键映射到相同的按键

答案 2 :(得分:29)

如果您想重新录制您所在的块而无需键入任何和弦,您可以这样做:

[[=]]

答案 3 :(得分:24)

所有命令的主人都是

gg=G

这会缩进整个文件!

以下是一些用于在Vim或gVim中快速缩进行的简单而优雅的命令。

缩进当前行下方的所有行

=G

缩进当前行

==

缩进当前行下面的n

n==

例如,缩进当前行下面的4行

4==

要缩进代码块,请转到其中一个大括号并使用命令

=%

答案 4 :(得分:17)

您可以使用整洁的应用程序/实用程序缩进HTML& XML文件,它在缩进这些文件时效果很好。

整理XML文件

:!tidy -mi -xml %

整理HTML文件

:!tidy -mi -html %

答案 5 :(得分:14)

按下转义然后快速输入以下组合:

gg=G

答案 6 :(得分:11)

1G=G。这应该缩进文件中的所有行。 1G将第一行显示,=将启动自动缩进,最后G会将您带到文件的最后一行。

答案 7 :(得分:7)

在Vim中,使用:insert。这将保留所有格式,而不是自动延迟。有关详细信息help :insert

答案 8 :(得分:7)

:set paste是你的朋友我使用putty并最终在windows之间复制代码。在我开启:set paste(和:set nopaste)之前,复制/粘贴让我适合这个原因。

答案 9 :(得分:6)

如果您不想使用:set paste,请单击鼠标中键,set nopaste,您也可以粘贴剪贴板的内容:

"*p
"+p

这样你就不必离开正常模式了。 如果您必须粘贴+*取决于您选择文字的方式,请参阅:help quoteplus

答案 10 :(得分:4)

vim-autoformat使用特定于您的语言的外部程序格式化您的源文件,例如rbeautify" Ruby文件的宝石," js-beautify"用于JavaScript的npm包。

答案 11 :(得分:3)

对于复杂的C ++文件,使用vim的=过滤器命令时,vim并不总能正确获得格式。因此,对于这种情况,最好使用外部C ++格式化程序,如astyle(或uncrustify),例如:

:%!astyle

Vim的'='函数默认使用它的内部格式化程序(并不总是把事情搞定),但也可以设置它使用外部格式化程序,如astyle,通过{{3}中讨论的适当设置}。

答案 12 :(得分:2)

vi应该尊重标签和空格,但是你应该考虑vi可能使用不同于其他编辑器的长度标签。你能比“整件事搞砸了”更具体吗?

答案 13 :(得分:2)

对于XML文件,我使用此命令

:1,$!xmllint --format --recover - 2>/dev/null

您需要安装xmllint(包libxml2-utils)

(资料来源:http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

答案 14 :(得分:1)

您可以创建一个映射来为您执行此操作。

这个会自动缩进整个文件并仍然将光标保持在您所在的位置:

nmap <leader>ai mzgg=G`z

答案 15 :(得分:0)

对于vi编辑器,请使用:insert。这将保留所有格式,而不是插入自动缩进。完成后按下转义查看实际格式化的文件,否则你会看到一些垃圾字符。喜欢^我 e.g:

{{1}}

答案 16 :(得分:0)

只需在vim中进入可视模式,然后只需按=即可从上向下的行中进行选择,所有选定的行都将缩进。