json.tool shell返回1,我丢失了vim缓冲区

时间:2018-08-27 20:19:29

标签: python json vim vi

因此,我很高兴使用vim在命令行中“破解”。我正在处理一些JSON文本,正在删除对象,修剪API响应以隔离摘要以更紧密地使用。

在某个时候,我很高兴从JSON中清除了所有垃圾,只剩下了我需要进行的工作...

所以我继续输入:%!python -m json.tool,然后开始繁荣。

所以我戳了一下之后,我的JSON文本不是有效的JSON文本,好像我忘记了某个地方的逗号。

:%!python -m json.tool
shell returned 1
Press ENTER or type command to continue

所以我按Enter键或其他任何键,然后我的缓冲区被一个很好的错误消息替换...

Expecting , delimiter: line 3 column 5 (char 20)

哦,所以我确实忘记了第3行的逗号,谢谢!

哦,但是我的JSON文本哪里去了?女士们,先生们,正是我寻求帮助的地方。通常在这里:q!中,然后重新打开JSON文件,然后尝试使其正确。但可以肯定的是,在我敢于尝试并使用python json工具设置非JSON文本格式之前,我一定能够从缓冲区中恢复缓冲区!

3 个答案:

答案 0 :(得分:0)

当我收到该错误消息时,看来我要做的就是键入u来“撤消”。 Vim很棒!

答案 1 :(得分:0)

如果您喜欢撤消操作,那么您会喜欢上它。较早的命令。键入:ea,然后输入要返回的秒数,然后按Enter。相反的是后面的命令:lat

但是我必须警告您,这次只是近似,建议您尽可能多地退出插入模式。通常,使用撤消和重做会更容易。

Vim 'earlier' and 'later' commands are not working as expected

答案 2 :(得分:0)

您可以设置'makeprg''errorformat',以便只需运行:make即可进行linting

autocmd FileType json setlocal makeprg=python\ -mjson.tool\ 2>&1\ %\ >\ /dev/null
                     \| setlocal errorformat=%m:\ line\ %l\ column\ %c\ %.%#

但是,如果您像我一样,并且您的json缓冲区通常是临时缓冲区,请使用setqflist()来填充快速修复列表。

call setqflist([], ' ', {'efm':'%m: line %l column %c %.%#', 'lines': systemlist('python -mjson.tool', getline(1, '$'))})

有关更多帮助,请参见:

:h 'makeprg'
:h 'errorformat'
:h setqflist()
:h systemlist()