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

时间:2013-01-15 22:11:36

标签: vim

我正在尝试做一些听起来非常简单的事情,但由于某些原因它无法正常工作。命令:

:m 10

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

:echo line(".") - 2

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

:m line(".") - 2

导致此错误:

  

M14:地址无效

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

:m =line(".") - 2

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

:m =line(".")

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


我确保:m接受整数,line()返回整数。

:echo type(5)
0
:echo type(line("."))
0

3 个答案:

答案 0 :(得分:6)

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

:execute "m" line(".") - 2

您可以将execute视为采用单个变量"m" line(".") - 2的函数。评估此变量,然后在ex-mode中以字符串形式执行。

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

答案 1 :(得分:2)

我建议你使用这样的相对地址:

:m-2

如需更多帮助,请参阅:

:h range

答案 2 :(得分:1)

实际上,你原来的答案几乎是正确的:

:m <C-R>=line(".") - 2

本来有用。其他解决方案也是正确的,但你应该看看有关表达式寄存器(:h quote_=)的vim文档,我相信你会发现一些有趣的东西!