1

所以我有以下小测试用例

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

4

1 回答 1

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
于 2012-09-27T13:28:16.643 回答