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

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

通常情况下,我会将代码复制并粘贴到远程terminal,并将整个事情弄糟。 我想一举解决这个问题。

= ,缩进命令可以运动。 所以, gg得到文件的开头, =缩进, G到文件的末尾, gg=G

在粘贴到terminal之前,尝试:set paste (然后:set nopaste在完成后:set nopaste )。 这将closures自动缩进,换行等function,搞乱了你的粘贴。

编辑:此外,我应该指出,比= indenting更好的结果通常可以通过使用外部程序获得。 例如,我一直运行:%!perltidy 。 astyle,cindent等也可以使用。 而且,当然,您可以将这些映射到关键笔划 – 并根据文件types将不同的映射映射到相同的按键

如果你想重新join你所在的区块而不必input任何和弦,你可以这样做:

 [[=]] 

您可以使用整洁的应用程序/实用工具来缩进HTML和XML文件,并且在缩进这些文件方面效果很好。

美化一个XML文件

 :!tidy -mi -xml % 

美化一个HTML文件

 :!tidy -mi -html % 

所有命令的主人是

gg=G

这缩进了整个文件!

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

缩进当前行下面的所有行

 =G 

缩进当前行

 == 

在当前行下方缩进n

 n== 

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

 4== 

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

 =% 

1G=G 这应该缩进文件中的所有行。 1G会把你的第一行, =开始自动缩进,最后的G会带你到文件的最后一行。

按下转义,然后快速键入下面的组合:

 gg=G 

在Vim中,使用:insert 。 这将保持你所有的格式,而不是自动缩进。 有关更多信息,请参阅help :insert

:set paste是你的朋友我使用腻子,并最终在Windows之间复制代码。 之前,我打开:set paste (和:set nopaste )复制/粘贴给了我适合这个原因。

如果你不想使用:set paste ,中键, set nopaste ,你也可以粘贴剪贴板的内容:

 "*p "+p 

这样你就不必离开正常模式。 如果你必须粘贴+*取决于你如何select文本,请参阅:help quoteplus

vim- autoformat使用特定于你的语言的外部程序来格式化你的源文件,例如rbeautify“Ruby for Ruby文件的gem”,“js-beautify”npm package for JavaScript。

对于复杂的C ++文件,当使用vim's = filter命令时,vim并不总能得到正确的格式。 所以对于这样的情况,最好使用像astyle (或uncrustify )这样的外部C ++格式化程序,例如:

 :%!astyle 

Vim的'='函数默认使用内部格式化程序(这并不总是正确),但也可以使用外部格式化程序(如astyle),按照此问题中的讨论进行适当设置。

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

对于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 )

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

 public static void main(String[] args) { ^I ^I System.out.println("Some Garbage printed upon using :insert"); } 

你可以创build一个映射来为你做这个。

这一个将自动缩进整个文件,仍然保持你的光标在你的位置:

 nmap <leader>ai mzgg=G`z