在 Vim 中,纠正所有行的缩进的命令是什么?
很多时候,我会将代码复制并粘贴到远程终端中,然后整个事情就搞砸了。我想一口气解决这个问题。
=
, indent 命令可以进行动作。因此,gg
要获取文件的开头,=
缩进,G
到文件的末尾,gg=G
.
在粘贴到终端之前,请尝试:set paste
,然后:set nopaste
在完成之后。这将关闭自动缩进、换行和其他扰乱粘贴的功能。
编辑:另外,我应该指出,=
通常可以通过使用外部程序获得比缩进更好的结果。例如,我:%!perltidy
一直在跑步。astyle
,cindent
等也可以使用。而且,当然,您可以将它们映射到按键,并根据文件类型将不同的按键映射到相同的按键。
所有命令的主人是
gg=G
这会缩进整个文件!
下面是一些用于在 Vim 或 gVim 中快速缩进行的简单而优雅的命令。
缩进当前行下方的所有行
=G
缩进当前行
==
缩进n
当前行下方的行
n==
例如,在当前行下面缩进 4 行
4==
要缩进代码块,请转到其中一个大括号并使用命令
=%
如果您想重新缩进您所在的块而无需键入任何和弦,您可以执行以下操作:
[[=]]
按 Escape 然后快速键入以下组合:
gg=G
您可以使用整洁的应用程序/实用程序来缩进 HTML 和 XML 文件,它在缩进这些文件时效果很好。
美化 XML 文件
:!tidy -mi -xml %
美化 HTML 文件
:!tidy -mi -html %
1G=G
. 这应该缩进文件中的所有行。1G
带您进入第一行,=
将启动自动缩进,finalG
将带您进入文件的最后一行。
:set paste
是你的朋友吗?我使用腻子并最终在 Windows 之间复制代码。在我被打开:set paste
(和:set nopaste
)复制/粘贴之前,正是出于这个原因。
如果不想用:set paste
,中键,set nopaste
也可以粘贴剪贴板的内容:
"*p
"+p
这样您就不必离开正常模式。如果您必须粘贴+
或*
取决于您选择文本的方式,请参阅:help quoteplus
。
在 Vim 中,使用:insert
. 这将保留您的所有格式并且不进行自动缩进。欲了解更多信息help :insert
。
vim-autoformat使用特定于您的语言的外部程序格式化您的源文件,例如用于 Ruby 文件的“rbeautify”gem,用于 JavaScript 的“js-beautify”npm 包。
=
对于复杂的 C++ 文件,使用 vim 的filter 命令时,vim 并不总是能正确格式化。因此,对于这种情况,最好使用外部 C++ 格式化程序,如astyle(或uncrustify),例如:
:%!astyle
Vim 的 '=' 函数默认使用其内部格式化程序(这并不总是正确),但也可以通过适当地设置它来设置它使用外部格式化程序,如 astyle,如本问题中所述。
对于 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)
您可以创建一个映射来为您执行此操作。
这将自动缩进整个文件,并且仍将光标保持在您所在的位置:
nmap <leader>ai mzgg=G`z
只需在 vim 中进入可视模式,并在选择后从上到下选择行 = ,所有选定的行都会缩进。
对于 vi 编辑器,使用 :insert。这将保留您的所有格式并且不插入自动缩进。完成后按转义键查看实际的格式化文件,否则您会看到一些垃圾字符。像 ^I 例如:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}