调试/跟踪 vim 插件的更可取的通用方法是什么?假设我有一个相当复杂的插件 Foo,它在按下一个键时会F9打开带有文件浏览器的新窗口并提供选择文件的可能性,然后将文件名复制到主窗口中。我想看看当我按下F9键时调用了什么,某种调用跟踪。
问问题
12372 次
3 回答
18
我发现最好的方法是-V
在启动 (g)vim 时使用标志。N
您可以为写入的日志指定跟踪级别和文件名:
$ vim -V[N]{filename}
然后将为每个来源的文件提供跟踪消息。(有关:help -V
更多信息,请参阅。)
浏览生成的日志文件可能会很痛苦,但通常信息量很大。我发现最好在触发事件之前和之后查看日志文件(<F9>
在您的情况下按下)以了解何时发生。
于 2012-03-12T14:09:00.343 回答
7
如果您已经打开了 vim,请尝试在 VIM 的内置调试器下手动执行该命令。
1)找出当你按键时vim做了什么
:map <F-9>
2)在调试器下手动运行映射命令
:debug _mapped_command_
3)现在你应该进入调试器,所以
set verbose=20
4)最后按n
回车键继续运行脚本
此时,您应该在屏幕上看到一大堆输出。您可以按 Space 滚动屏幕,按 j/k 逐行移动。
任何以 "Line #:" 开头的输出都是当时 vim 正在执行的行。
于 2015-04-11T03:26:00.113 回答
1
对于复杂的插件,通常命令行调试或跟踪是不够的。
您可以使用BreakPts在 vim中进行可视化调试。
它是基于远程调试的,所以你需要调试一个vim的服务器实例。
基本上:
1号航站楼:
$ vim --servername Foo
...
set breakpoint on any Foo function
do whatever operation which trigger Foo logic
...
2号航站楼:
$ vim
:BreakPts
:BPRemoteServ FOO
:BPDWhere locate (actual debug execution point)
:BPDNext or F12 (next execution line)
:BPDStep or F11 (step inside functions, dictionary functions)
:BPDEvaluate or F8 (if pressed on visual selection evaluates that)
:BPDCont or F5 (continue execution)
看到一些插件是动态加载的,所以你需要在设置断点之前对它们进行操作。
加载后,您可以从连接的 vim 设置断点:
:BPFunctions (Show debuggeable fuctions on RemoteServer)
:BPScripts (Show debuggeable scripts on RemoteServer)
:BPPoints (Show defined breakpoints on RemoteServer)
多亏了这个很棒的插件,我修复/调整/进化了很多 vim 插件。
于 2015-07-05T21:46:22.900 回答