如何在Vim命令中使用函数的返回值?

Hub*_*bro 9 vim

我正在尝试做一些听起来非常容易的事情,但由于某些原因它不起作用.命令:

:m 10
Run Code Online (Sandbox Code Playgroud)

将当前行移动到第10行的正下方,然后

:echo line(".") - 2
Run Code Online (Sandbox Code Playgroud)

打印出从光标向上两行的行号.阅读完文档后,我写了这个命令:

:m line(".") - 2
Run Code Online (Sandbox Code Playgroud)

它导致了这个错误:

M14:地址无效

所以我认为除非我使用=符号,否则不会评估函数,所以我试过:

:m =line(".") - 2
Run Code Online (Sandbox Code Playgroud)

这给了我同样的错误.为了确保空间不是原因,我试过:

:m =line(".")
Run Code Online (Sandbox Code Playgroud)

哪个仍然给我同样的错误!我在这做错了什么?


我确保:m接受整数并line()返回整数.

:echo type(5)
0
:echo type(line("."))
0
Run Code Online (Sandbox Code Playgroud)

Pri*_*ash 8

为了评估表达式并将其传递给ex-mode命令,您需要使用该execute命令.在你的情况下,这工作:

:execute "m" line(".") - 2
Run Code Online (Sandbox Code Playgroud)

您可以将其execute视为采用单个变量的函数"m" line(".") - 2.计算此变量,然后在ex模式下作为字符串执行.

如需更多帮助,请参阅:help execute.