所以我有以下小测试用例
vnoremap <silent> d :<C-u>call Test()<cr>
vnoremap <silent> e :<C-u>call Test2()<cr>
fun! AskUser()
let v = input('is this really ok with you? (y/n) ')
redraw
return v
endfun
fun! Test() range
call AskUser()
if 1
echo 'hi hi hi'
echo 'hi hi hi'
endif
endfun
fun! Test2() range
call AskUser()
echo 'hi hi hi'
echo 'hi hi hi'
endfun
所以任何人都可以解释为什么视觉模式d键绑定根本无法显示任何消息 e键绑定没有问题
注意问题与键绑定无关,而是与事实有关 调用输入函数后有if语句
我已经在MacVim和Linux上的终端vim上测试了它在从mercurial源代码编译的最新vim版本上并且都有这个问题
更新:有些人不明白这是什么问题。好的,详细解释 当你在视觉模式下点击d时你得到一个输入提示,当你回答它时,你没有在命令行看到任何消息当你点击e并回答提示时你会看到消息hi hi hi连续两次并按'ENTER或键入命令以继续'消息
答案 0 :(得分:1)
我不知道这种不同行为的原因,但测试我意识到如果函数以条件if
结束而最后一句是endif
,则消息不会显示在屏幕上。
我仅使用您的代码创建了自定义vimrc
,并且已使用vim -N -u new-custom-vimrc infile
运行它。就像那样,我可以重现问题的行为,但是当我避免将endif
作为函数的最后一句时,它似乎有用,例如:
fun! Test() range
call AskUser()
if 1
echo 'hi hi hi'
echo 'hi hi hi'
endif
let dummy = 1
endfun
也适用于此:
fun! Test() range
call AskUser()
if 0
return
endif
echo 'hi hi hi'
echo 'hi hi hi'
endfun