我正在尝试做一些听起来非常简单的事情,但由于某些原因它无法正常工作。命令:
: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
答案 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文档,我相信你会发现一些有趣的东西!