自动缩进/格式化Vim代码?


35

我会尽可能地使用Vim。在Vim和诸如Aptana之类的IDE之间,我最大的把握之一就是能够自动缩进。

是否有一种自动格式化代码(HTML,CSS,PHP)的方法,以便正确缩进?

如果是这样,如何将其安装到vim中?我不太了解插件。我尝试查看此线程,它使我更加困惑:如何更改vim自动缩进行为?


您能说明您要缩进的语言吗?我希望,如果它已经得到vim的支持,它应该已经自动缩进而无需更多的努力。如果没有,您应该可以得到一个插件。
Edd Steel'9

最好是HTML / CSS和php
chrisjlee 2011年

Answers:


54

要自动缩进整个文件:

gg
=G

解释:

  • gg -转到文件的开头
  • G -转到文件末尾
  • =- 缩进

2
你能把它分解吗?g本身通常是什么?和= G?
chrisjlee 2011年

@Chris看编辑
Takehin

1
很好的提示,我从来都不知道。但是,它会对bash进行垃圾处理。
Sparhawk

如何gg=G从外壳执行而不打开文件?
WM

@takeshin可以请你多进一步解释这件事,我们需要把它在文件中键入或我们需要在终端运行它
Kasun Siyambalapitiya

14

我不知道如何自动格式化现有代码,但是如果您正在编写代码并且需要自动缩进:

  • :set autoindent(或:set ai)将启用自动缩进
  • Ctrl- d取消缩进(又称缩排)您的代码
  • 制表符或要缩进的空格-我个人使用制表符
  • :set tabwidth=4(或:set tw=4)将控制标签应缩进多少空格
  • >>命令将缩进当前行。如果用数字作为前缀,则说4>>它将缩进4行,从当前行开始。
  • 同样,该<<命令将取消缩进一行

希望这给您一个良好的开端。


7
要自动缩进现有代码,请={motion}在普通模式下使用-例如,=G将缩进从当前行到文件末尾的所有代码。==将缩进当前行。
Edd Steel'9

1
还确保缩进插件正在加载(例如:filetype indent on
jw013 2011年

2
set tw = 4将TEXTWIDTH设置为4
Steffen Roller


2

该插件使您可以更轻松地对代码执行格式化。它集成了外部格式化程序,并且回退了vim的缩进功能。

https://github.com/Chiel92/vim-autoformat

另外,请注意格式化和缩进之间的区别。缩进仅校正每行之前的空格,而格式化还处理其他任何事情,例如运算符周围的空格等。



0

在bash中,我这样做:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

这消除了注释,并使脚本“重击方式”缩进了缩进。如果脚本包含HEREDOCS,它将不起作用,但是如果您这样做:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

它可以与任何脚本一起使用,但是整个脚本将缩进4个空格。随时进行修改,但在脚本中引用我的名字并将其发布!:D


我认为这可能遗漏了问题的重点;我相信OP希望在VIM中针对各种语言自动缩进,而不是缩进一行。sedcat script_to_be_reindented.sh | sed 's#^# #g'
顺便说一句

0

vim的自动格式化/缩进效果很好。首先,将此行放入您的~/.vimrc

filetype plugin indent on

然后在vim中打开文件并键入 gg=G

gg将光标移动到第一行。=运行indent命令。G告诉indent命令从此处运行到最后一行。)

如果自动格式化看起来真的很糟糕,就像每行都缩进一样,请运行:scriptnames并检查列表中是否包含.../indent/html.vim(或使用的任何语言)。如果不~/.vimrc正确,请确保您是正确的。或者,如果:filetype plugin indent on从vim命令行运行,则需要重新打开文件:e

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.