wsdjeg-vim-galore-zh_cn/chapter/Debugging-Vim-Scripts.md
2017-05-19 10:18:27 +08:00

1.8 KiB
Executable File
Raw Blame History

Vim脚本调试

如果你以前使用过命令行调试器的话,对于:debug命令你很快就会感到熟悉。

只需要在任何其他命令之前加上:debug就会让你进入调试模式。也就是被调试的Vim脚本会在第一行停止运行同时该行会被显示出来。

想了解可用的6个调试命令可以查阅:h >cont和阅读下面内容。需要指出的是类似gdb和其他相似调试器调试命令可以使用它们的简短形式cqnsif

除了上面的之外你还可以自由地使用任何Vim的命令。比如:echo myvar,该命令会在当前的脚本代码位置和上下文上被执行。

只需要简单使用:debug 1,你就获得了REPL调试特性。

当然,调试模式下是可以定义断点的,不然的话每一行都去单步调试就会十分痛苦。(断点之所以被叫做断点,是因为运行到它们的时候,运行就会停止下来。因此,你可以利用断点跳过自己不感兴趣的代码区域)。请查阅:h :breakadd:h :breakdel:h :breaklist获取更多细节。

假设你需要知道你每次在保存一个文件的时候有哪些代码在运行:

:au BufWritePost
" signify  BufWritePost
"     *         call sy#start()
:breakadd func *start
:w
" Breakpoint in "sy#start" line 1
" Entering Debug mode.  Type "cont" to continue.
" function sy#start
" line 1: if g:signify_locked
>s
" function sy#start
" line 3: endif
>
" function sy#start
" line 5: let sy_path = resolve(expand('%:p'))
>q
:breakdel *

正如你所见,使用<cr>命令会重复之前的调试命令,也就是在该例子中的s命令。

:debug命令可以和verbose选项一起使用。