关于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
。