在Vim中调整格式规则

4

我不是Vim的新手,但也不是专家。如果我有一段JavaScript代码如下:

function foo(a,b,c,d) {
if (one||two) {
if (rhyme||reason) {
return true;
}
return false;
}
}

当我使用命令gg=G格式化代码后,得到以下代码:
function foo(a,b,c,d) {
   if (one||two) {
      if (rhyme||reason) {
         return true;
      }
      return false;
   }
}

这样看起来更加美观。但是,如果我想要以下效果(或者我想将上面的结果转换成以下效果)会怎么样:

function foo( a, b, c, d ) 
{
   if ( one || two ) 
   {
      if ( rhyme || reason ) 
      {
         return true;
      }
      return false;
   }
}

有没有办法指导 Vim 如何解析代码?我可以使用正则表达式来查找括号并添加空格,但是当考虑到所有操作符(!,%,*,-,+,=,/)时,这种方法就会失败。

2个回答

5

几个不同的评论:

  • = 操作符仅处理缩进;除非您使用 :set equalprg=foo 覆盖其行为。它不会改变每行的内容。请参见 :help =

  • gq 操作符将重新格式化跨越多行的文本。默认情况下,它使用内部格式化程序,它接受通过 :set formatoptions 设置的选项(请参见 :help fo:help fo-table)。如果您知道一个外部工具可以按照您想要的方式重新格式化代码,则可以将 formatexpr(每个缓冲区)或 formatprg(全局)设置为在执行 gq 时调用该程序。请参见 :help gq。使用这个而不是 gg=G 变成了 gggqG

  • vim 网站上有一个 Javascript 美化插件这里。我没有使用过。它只是 vimscript,因此如果您想要修改它以完全按照您想要的方式格式化东西,那么所有需要的都在那里供您使用。


"gq" 更适合用于文本。我将其设置为 "par" 并使用它来格式化注释。 - puk
也许我应该寻找外部美化工具。 - puk
我可以亲自证明jsbeautify的工作非常出色。我没有尝试过定制其格式,但它不仅仅是纠正缩进。 - Jonathan Beebe

4
尝试使用这个 vim 插件:https://github.com/vim-autoformat/vim-autoformat。只需按下一个按钮,就能完成格式化。它使用 gq,并设置外部格式程序以正常使用它。因此,如果您安装了此插件和 einars js-beautify,则能够立即格式化 JavaScript。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接