在Vim中,纠正所有行缩进的命令是什么?
很多时候我会将代码复制并粘贴到远程终端中并使整个过程搞砸了。 我想一举解决这个问题。
-
类似:在Vi SE重新缩进严格缩进的代码
-
预防胜于治疗。 在这种精神上来了这个评论。 在进入插入模式并从远程终端粘贴代码之前,请执行":set paste"。
=,缩进命令可以采取动作。所以,gg来获取文件的开头,=来缩进,G到文件的末尾,gg=G。
-
我永远无法忘记我珍贵的1G =)我最喜欢的一个是=%站在开口支架上。它修复了整个块的缩进。
-
:0 并不是那么糟糕但gg很好。 (是的,我先学过ed)
-
我可以在不离开当前行的情况下缩进整个文件吗?
-
@ Fá bio:''(两个单引号)带你回到原来的位置,所以gg=G''应该缩进然后返回。
-
它似乎不适用于Mac OS VIM
-
@ArchimedesTrajano Mac OS的库存vim非常老,我推荐HomeBrew的版本;它更新了。我对Mac的vim有一些恼人的问题。另外,我听说你不应该搞乱内置的,所以除非你非常小心,否则不要自己更新。
-
为什么gg = G的工作时间如此之长?在Sublime with plugin中我可以非常快速缩进5000 xml行,但在Vim中它需要更多,而不是秒,分钟...
-
抱歉,我在哪里执行command?
-
GG WP报告9x pls
-
为了"按原样"粘贴,我经常使用:r !cat来读取粘贴到cat命令中的内容。完成粘贴内容后,按ctrl+d ctrl+d键将当前光标位置发送到vim。
-
我会去gg=G回到光标位置。我把它映射到g 就像这样:nnoremap g gg=G
在粘贴到终端之前,尝试:set paste(然后在完成后再:set nopaste)。这将关闭搞乱粘贴的自动缩进,换行等功能。
编辑:另外,我应该指出,通常可以通过使用外部程序获得比=缩进更好的结果。例如,我一直运行:%!perltidy。也可以使用astyle,cindent等。当然,您可以将它们映射到键击 - 并根据文件类型将不同的键映射到相同的击键
-
您可以在ftplugin中设置equalprg选项,以使用外部过滤器进行=缩进,而不是使用自定义键绑定。
-
还有一个pastetoggle键绑定选项,例如。 :设置pt p在模式之间切换
-
注意:在grml的vimconfig中,pastetoggle键被映射到F11
-
我使用formatpgm整齐和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自动缩进要好得多
如果你想重新加入你所在的块而不必键入任何和弦,你可以这样做:
-
很抱歉重振这一点,但你的和弦是什么意思? COORDS?
-
这里的"和弦"是指通过按住一个键同时按下另一个键而发出的命令,类似于音乐和弦,同时发出几个音符。所以G是shift + g,^]是ctrl +],依此类推。这些输入比单键绑定需要更长的时间。
-
这是如何运作的?
-
您也可以使用=aB,它根本不会移动光标。
-
在北欧键盘上,[[=]]需要5个和弦:(
-
@QPaysTaxes vimdoc.sourceforge.net/htmldoc/motion.html# [[
所有命令的主人都是
gg=G
这会缩进整个文件!
下面是一些简单而优雅的命令,用于在Vim或gVim中快速缩进行。
缩进当前行下面的所有行
缩进当前行
缩进当前行下方的n行
例如,缩进当前行下面的4行
要缩进代码块,请转到其中一个大括号并使用命令
您可以使用整洁的应用程序/实用程序来缩进HTML& XML文件,它在缩进这些文件时非常有效。
整理XML文件
整理HTML文件
按下转义然后快速输入以下组合:
-
我慢慢打字,你不会相信接下来发生的事情。
-
我只是给了答案和评论一个upvote因为那是无价的!哈哈@ k0pernikus
1G=G。这应该缩进文件中的所有行。 1G带您到第一行,=将启动自动缩进,最后G将带您到文件的最后一行。
:set paste是你的朋友我使用putty并最终在windows之间复制代码。在我开启:set paste(和:set nopaste)之前,复制/粘贴让我适合这个原因。
在Vim中,使用:insert。这将保留所有格式,而不是自动延迟。有关更多信息help :insert。
如果您不想使用:set paste,请单击中键,set nopaste,您也可以粘贴剪贴板的内容:
这样您就不必离开正常模式。
如果必须粘贴+或*取决于您选择文本的方式,请参阅:help quoteplus。
vim-autoformat使用特定于您的语言的外部程序格式化您的源文件,例如rbeautify"gem for Ruby files,"js-beautify"npm package for JavaScript。
对于复杂的C ++文件,当使用vim的=过滤器命令时,vim并不总能正确地获得格式。因此,对于这种情况,最好使用外部C ++格式化程序,如astyle(或uncrustify),例如:
Vim的'='函数默认使用它的内部格式化程序(它并不总能使事情正确)但是也可以设置它使用外部格式化程序,如astyle,通过正确设置它,如本问题所述。
对于XML文件,我使用此命令
1
| :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应该尊重制表符和空格,但是你应该考虑vi可能使用不同于其他编辑器的长度选项卡。你能比"整件搞砸了"更具体吗?
-
我不使用制表符作为缩进。混淆的意思是当你在远程终端上复制和粘贴代码时,每一行都是从行的开头随机偏移的。
-
如果将Vim设置为自动缩进,则粘贴已经有空格缩进的代码将缩进甚至更远。它与每个粘贴的线条混合在一起。
只需在vim中进入可视模式,然后在选择按下=后选择从上到下的行,所有选定的行都将缩进。
您可以创建映射来为您执行此操作。
这个将自动缩进整个文件并仍然将光标保持在您所在的位置:
1
| nmap <leader>ai mzgg=G`z |
对于vi编辑器,请使用:insert。这将保留所有格式,而不是插入自动缩进。完成后按下转义查看实际格式化的文件,否则你会看到一些垃圾字符。喜欢^我
例如:
1 2 3 4
| public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
} |