两次连续相同的 echo 调用在 Vim 函数中有不同的输出
Two consecutive identical calls to echo have different output in Vim function
Original post on Vi and Vim Beta, which has had one interesting answer,不过目前关注的不多。很抱歉交叉张贴,我会要求原件是 closed/deleted.
给定 .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
.
Original post on Vi and Vim Beta, which has had one interesting answer,不过目前关注的不多。很抱歉交叉张贴,我会要求原件是 closed/deleted.
给定 .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
.