Vim视觉键输入奇怪的行为

时间:2012-09-27 12:24:38

标签: vim

所以我有以下小测试用例

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或键入命令以继续'消息

1 个答案:

答案 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