676

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

很多时候,我会将代码复制并粘贴到远程终端中,然后整个事情就搞砸了。我想一口气解决这个问题。

4

16 回答 16

1301

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

于 2009-02-03T05:19:20.670 回答
134

在粘贴到终端之前,请尝试:set paste,然后:set nopaste在完成之后。这将关闭自动缩进、换行和其他扰乱粘贴的功能。

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

于 2009-02-03T05:47:19.473 回答
42

所有命令的主人是

gg=G

这会缩进整个文件!

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

缩进当前行下方的所有行

=G

缩进当前行

==

缩进n当前行下方的行

n==

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

4==

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

=%
于 2015-08-31T10:23:40.747 回答
32

如果您想重新缩进您所在的块而无需键入任何和弦,您可以执行以下操作:

[[=]]
于 2011-03-02T03:44:55.157 回答
18

按 Escape 然后快速键入以下组合:

gg=G
于 2014-12-02T13:22:19.413 回答
17

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

美化 XML 文件

:!tidy -mi -xml %

美化 HTML 文件

:!tidy -mi -html %
于 2009-07-06T08:48:06.600 回答
12

1G=G. 这应该缩进文件中的所有行。1G带您进入第一行,=将启动自动缩进,finalG将带您进入文件的最后一行。

于 2009-02-03T21:17:02.093 回答
8

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

于 2009-02-03T21:34:52.477 回答
8

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

"*p
"+p

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

于 2009-12-21T22:05:47.897 回答
7

在 Vim 中,使用:insert. 这将保留您的所有格式并且不进行自动缩进。欲了解更多信息help :insert

于 2009-02-03T05:44:14.970 回答
4

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

于 2015-03-22T18:26:52.723 回答
3

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

:%!astyle

Vim 的 '=' 函数默认使用其内部格式化程序(这并不总是正确),但也可以通过适当地设置它来设置它使用外部格式化程序,如 astyle,如本问题中所述。

于 2014-12-16T12:05:52.060 回答
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

于 2015-08-26T10:16:45.063 回答
1

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

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

nmap <leader>ai mzgg=G`z
于 2017-02-08T22:06:33.610 回答
1

只需在 vim 中进入可视模式,并在选择后从上到下选择行 = ,所有选定的行都会缩进。

于 2018-12-04T12:14:10.317 回答
0

对于 vi 编辑器,使用 :insert。这将保留您的所有格式并且不插入自动缩进。完成后按转义键查看实际的格式化文件,否则您会看到一些垃圾字符。像 ^I 例如:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
于 2015-12-23T15:12:25.623 回答