所以我很乐意使用vim在命令行中“黑客”。我正在研究一些JSON文本,我正在删除对象,修剪API响应以隔离片段以更紧密地工作。
在某些时候,我很高兴我从JSON中删除了所有的垃圾,我只得到了我需要继续工作的东西......
所以我继续输入:%!python -m json.tool
和繁荣。
因此,在我使用它之后,我的JSON文本不是有效的JSON文本,看起来我在某个地方忘记了一个逗号。
:%!python -m json.tool
shell returned 1
Press ENTER or type command to continue
所以我点击输入或任何其他键,然后我的缓冲区被一个很好的错误消息替换...
Expecting , delimiter: line 3 column 5 (char 20)
哦,所以我忘了逗号,在第3行,谢谢!
哦,但我的JSON文字去了哪里?女士们,先生们是我寻求帮助的人。这通常是我:q!
并重新打开JSON文件并尝试这次正确的地方。但是我必须能够恢复我的缓冲区,直到我有胆量试图使用python json工具来格式化一堆非JSON文本!
看起来我所要做的就是当我收到错误消息时键入u
以“撤消”。 Vim真棒!
如果你喜欢撤消那么你会喜欢这个。较早的命令。键入:ea
,然后输入您想要返回的秒数并按Enter键。与此相反的是后来的命令:lat
。
但是我必须警告你,这个时间只是近似值,建议你尽可能经常地使用插入模式。通常使用undo和redo更容易。
Vim 'earlier' and 'later' commands are not working as expected
你可以设置'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()
来填充quickfix列表。
call setqflist([], ' ', {'efm':'%m: line %l column %c %.%#', 'lines': systemlist('python -mjson.tool', getline(1, '$'))})
有关更多帮助请参阅:
:h 'makeprg'
:h 'errorformat'
:h setqflist()
:h systemlist()