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

Vim 如何修复Vi中整个文件的缩进?,vim,vi,indentation,Vim,Vi,Indentation,在Vim中,纠正所有行缩进的命令是什么 很多时候,我会把代码复制粘贴到远程终端,把整个事情搞砸。我想一下子解决这个问题。=,缩进命令可以执行动作。因此,gg要获取文件的开头,=要缩进,G到文件的结尾,gg=G在Vim中,使用:insert。这将保留所有格式,而不会自动缩进。有关详细信息帮助:插入 粘贴到终端之前,请先尝试:设置粘贴,完成后再尝试:设置nopaste。这将关闭自动缩进、换行和其他会弄乱粘贴的功能 编辑:另外,我应该指出,使用外部程序通常可以获得比缩进更好的结果。例如,我运行:%!每

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


很多时候,我会把代码复制粘贴到远程终端,把整个事情搞砸。我想一下子解决这个问题。

=
,缩进命令可以执行动作。因此,
gg
要获取文件的开头,
=
要缩进,
G
到文件的结尾,
gg=G
在Vim中,使用
:insert
。这将保留所有格式,而不会自动缩进。有关详细信息
帮助:插入

粘贴到终端之前,请先尝试
:设置粘贴
,完成后再尝试
:设置nopaste
。这将关闭自动缩进、换行和其他会弄乱粘贴的功能


编辑:另外,我应该指出,使用外部程序通常可以获得比缩进更好的结果。例如,我运行
:%!每天都是<代码>astyle
cindent
等也可以使用。当然,您可以将这些映射到一个按键,并根据文件类型将不同的映射到相同的按键。

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

:set paste
是您的朋友我使用putty并最终在窗口之间复制代码。在我打开
:set paste
(和
:set nopaste
)之前,复制/粘贴正是因为这个原因才适合我。

您可以使用tidy应用程序/实用程序缩进HTML和XML文件,它在缩进这些文件时效果非常好

美化XML文件

:!tidy -mi -xml %
美化HTML文件

:!tidy -mi -html %

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

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

如果您想在不必键入任何和弦的情况下重新插入所处的块,可以执行以下操作:

[[=]]

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

gg=G

对于复杂的C++文件,VIM在使用VIM的代码> = 筛选器命令时,并不总是得到格式正确。因此,对于这样的情况,最好使用外部的C++格式化程序,例如(或):
Vim的“=”函数默认使用其内部格式化程序(这并不总是正确的),但也可以使用外部格式化程序(如astyle)对其进行设置,如中所述

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

对于XML文件,我使用以下命令

:1,$!xmllint --format --recover - 2>/dev/null
您需要安装xmllint(包libxml2-utils)


(来源:)

所有命令的主控是

gg=G

这将缩进整个文件

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

将当前行下的所有行缩进

=G
==
n==
4==
缩进当前行的步骤

=G
==
n==
4==
在当前行下方缩进
n

=G
==
n==
4==
例如,在当前行下方缩进4行

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

=%

对于vi编辑器,使用:insert。这将保留所有格式,而不会插入自动缩进。完成后,按escape查看实际的格式化文件,否则会看到一些垃圾字符。就像我 e、 g:


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

此选项将自动缩进整个文件,并将光标保持在当前位置:

nmap <leader>ai mzgg=G`z
nmap ai mzgg=G`z

只需在vim中进入视觉模式,然后从上到下选择行。选择Just press=,所有选中的行都将缩进。

我将永远无法忘记我宝贵的1G=)我最喜欢的一个是==站在开放支架上。它修复了整个块的缩进。:0不是很糟糕,但gg很好。(是的,我先学会了ed)我能在不离开当前行的情况下缩进整个文件吗?@Fábio:
'
(两个单引号)会带你回到原来的位置,所以
gg=G'
应该缩进然后返回。@ArchimedesTrajano Mac OS的股票vim非常旧,我推荐自制版本;它更新了很多。我对Mac的vim有一些恼人的问题。另外,我听说你不应该弄乱内置的,所以除非你非常小心,否则不要尝试自己更新它。是的,我也在用腻子设置粘贴是一种功能。您可以在ftplugin中设置
equalprg
选项,以使用外部过滤器进行缩进,而不是自定义键绑定。还有一个粘贴切换键绑定选项,例如:将pt\p设置为在模式之间切换注意:在grml的vimconfig中,粘贴切换键映射到F11I使用
formatpgm
和tidy和astyle,然后使用
gq
。以下是我的
.vimrc
中的一些示例:
au FileType xml set fp=tidy \-q \-i \-xml
au FileType java set fp=/usr/local/bin/astyle \-mode=java \-indent=tab
在阅读本文之后,刚刚下载了perltidy,它比默认的vim自动缩进好得多:在Vi SEPrevention比cure好。本着这种精神,这一评论应运而生。在进入插入模式并从远程终端粘贴代码之前,请先执行“:set paste”。我输入的速度很慢,你不会相信接下来会发生什么。我只是对答案和注释进行了一次向上投票,因为这是无价的!lol@k0pernikusSorry想恢复这一点,但你所说的和弦是什么意思?“和弦”在这里指的是按住一个键同时按下另一个键发出的命令,类似于音乐和弦是同时发出几个音符。