我在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
答案 0 :(得分:2)
我可以解释逻辑,但我不确定一个简单的解决方法。 Vim的内部压头遵循C风格的语法,因此"a" : "value1",
行不以;
结尾,它假定以下行是该语句的延续,并且它们应缩进以显示
:help C-indenting
深入讨论了各种缩进选项以及它们如何相互作用。我撇去它,没有任何东西跳出来,但值得一读。
如果您有一个更好地识别代码结构的外部格式化程序,您可以始终设置equalprg
来运行它而不是使用内部格式化程序。
编辑:第二个想法,set cinoptions+=+0
将禁用行继续缩进。这也会影响常规代码,但这可能是一个合理的权衡取决于哪些会让你烦恼。如果您正在编辑独立的.json文件,也可以按文件类型进行设置。
答案 1 :(得分:1)
内置的缩进设置不会完全覆盖像JSON这样复杂的非C语言。更好地使用定制的缩进设置,例如属于vim-json的indent/json.vim
缩进插件。