如何修复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