Debugging 如何调试vim indentexpr脚本?

Debugging 如何调试vim indentexpr脚本?,debugging,vim,Debugging,Vim,我下载了一个verilog/systemverilog缩进文件,看起来非常全面。然而,有一个问题:它不起作用。我正在查看vimscript代码,希望既能修复它(我在Vim8.2上,可能存在版本不匹配),又能增强它。但是,我在调试时遇到了一些问题。具体来说,indentexpr脚本有一个变量v:lnum,该变量在按下indentkey并计算indentexpr时设置 但是,我不知道如何在indentexpr调用上进入调试模式。我尝试在vimscript中手动调用该函数,但这会留下v:lnum作为一

我下载了一个verilog/systemverilog缩进文件,看起来非常全面。然而,有一个问题:它不起作用。我正在查看vimscript代码,希望既能修复它(我在Vim8.2上,可能存在版本不匹配),又能增强它。但是,我在调试时遇到了一些问题。具体来说,indentexpr脚本有一个变量v:lnum,该变量在按下indentkey并计算indentexpr时设置


但是,我不知道如何在indentexpr调用上进入调试模式。我尝试在vimscript中手动调用该函数,但这会留下v:lnum作为一些垃圾号(好的,是调用indentexpr的最后一行)。当我实际按下调用indentexpr的键时,有没有办法进入调试模式?

使用
v:lnum
的最佳方法是作为函数的参数。下面是一个示例:vim ruby的indentexpr设置通常如下所示:

setlocal indentexpr=GetRubyIndent()
在函数内部,变量
v:lnum
用于获取调用它的行号。正如你所发现的,这很不方便。因此,更好的方法是:

setlocal indentexpr=GetRubyIndent(v:lnum)
因此,在脚本中找到设置
indentexpr
的位置,并将其更改为将magic
v:lnum
变量作为参数。然后,您可以重写函数本身以接受单个参数:

function! GetRubyIndent(lnum)
现在,在该函数中,
a:lnum
变量将是行号,您可以使用该参数调用该函数。搜索函数中的所有位置,并将其替换为
a:lnum
。缩进脚本现在应该像以前一样工作,您可以使用行号手动调用该函数

下面是在vim ruby存储库中执行此操作的特定提交,如下所示


此外,
echomsg“foo”
将打印一条消息,您可以通过运行
:messages
命令来阅读该消息。我可以推荐该插件,以便于阅读调试消息。

谢谢。在进入调试模式时,我只设置了v:lnum。这也行得通。但这是相当低效的。