连续两次相同的回显调用在 Vim 函数中具有不同的输出



关于Vi和Vim Beta的原始帖子,有一个有趣的答案,但到目前为止还没有太多关注。我很抱歉交叉发布,我会要求关闭/删除原件。

给定.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的不同结果。

问题完全与 Vim 中的屏幕重绘有关(见:h echo-redraw(。

echo更改为echom仍然会产生相同的(损坏的(屏幕输出(3 0 2 0 1 0 0 0(,但:mess揭示了隐藏的内容:3 3 0 0 2 2 0 0 1 1 0 0 0 0

最新更新