【发布时间】:2019-09-28 11:43:20
【问题描述】:
Original post on Vi and Vim Beta,曾经有过one interesting answer,但目前关注度不高。很抱歉交叉发布,我会要求关闭/删除原件。
给定.vimrc文件中的以下函数,
fu! MyFun(count)
echo a:count
echo a:count
if a:count > 0
normal ,
call MyFun(a:count - 1)
endif
endf
调用:call MyFun(3) 会生成以下输出。
3
3
2
2
1
1
0
0
但是,如果我定义了映射 nn , :<C-U>execute "call MyFun(" . v:count . ")"<CR>,那么对 :call MyFun(3) 的调用就会生成
3
0
2
0
1
0
0
0
我明白, 的映射使MyFun 函数调用自身两次(if a:count > 0),但是我不明白这如何导致两次连续调用echo a:count 的结果不同。
【问题讨论】:
-
[对刚刚删除的评论的回答] 实际上不是,
a:count是具有参数count的函数中的有效参数标识符,MyFun的情况也是如此(什么传递给函数的实际参数是无关紧要的);请检查:h a:var。另一方面,v:count用于检索为最后一个正常模式命令提供的计数;请参考:h v:count。 -
也许避免交叉发布和删除这个问题是有意义的?那么我可以为 vim.se 重写我的答案。
-
嗯,我同意你的观点,这个问题最合适的网站是https://vi.stackexchange.com/,而不是 StackOverflow。但是,如果没有交叉发布,我就不会受到任何关注。既然您可以在那里发布问题,那就请这样做,我会关闭这个。不过,以后我想我会在这里发布“核心”问题,因为那里没有太多关注。
标签: recursion vim scripting keymapping