如何在vim中获取gg = G忽略逗号?

时间:2014-01-28 17:54:53

标签: json vim macvim auto-indent

我在vim中有自动提示和smartindent,但是nocindent关闭了。我试图缩进一些JSON文本而不打印整个东西,这会太过于干扰:

{
  "a" : "value1",
  "b": "value2",
  "c": "value3",
  ...

由gg = G格式化为:

{
  "a" : "value1",
    "b": "value2",
    "c": "value3",
    ...

那里的逻辑是什么,如果有可能,我可以设置哪些选项来修复它?我尝试切换像autoindent,smartindent和cindent这样的选项(使用“no”对应物),但它对=命令没有影响。我最近的尝试有这些选择:

autoindent
smartindent
nocindent
cinoptions=
indentexpr=
indentkeys=0{,0},:,0#,!^F,o,O,e

2 个答案:

答案 0 :(得分:2)

我可以解释逻辑,但我不确定一个简单的解决方法。 Vim的内部压头遵循C风格的语法,因此"a" : "value1",行不以;结尾,它假定以下行是该语句的延续,并且它们应缩进以显示

:help C-indenting深入讨论了各种缩进选项以及它们如何相互作用。我撇去它,没有任何东西跳出来,但值得一读。

如果您有一个更好地识别代码结构的外部格式化程序,您可以始终设置equalprg来运行它而不是使用内部格式化程序。

编辑:第二个想法,set cinoptions+=+0将禁用行继续缩进。这也会影响常规代码,但这可能是一个合理的权衡取决于哪些会让你烦恼。如果您正在编辑独立的.json文件,也可以按文件类型进行设置。

答案 1 :(得分:1)

内置的缩进设置不会完全覆盖像JSON这样复杂的非C语言。更好地使用定制的缩进设置,例如属于vim-jsonindent/json.vim缩进插件。