【问题标题】:Vim visual key input strange behaviourVim 视觉键输入奇怪的行为
【发布时间】:2012-12-01 05:47:23
【问题描述】:

所以我有以下小测试用例

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

【问题讨论】:

  • echo 消息在 Linux 中都以VIM - Vi IMproved 7.3 打印。
  • 有些人说你可以,如果它对你有用,你可以通过运行 vim -N -u none 来重现问题
  • 两者都使用 GVIM 7.3.000 为我打印 hi hi hi;请注明完整版本(包括补丁号)而不是最新;补丁几乎每天都会发布。
  • VIM - Vi IMproved 7.3(2010 年 8 月 15 日,2012 年 9 月 26 日 17:32:05 编译)包含的补丁:1-672
  • 还有这个 MacVim VIM - Vi IMproved 7.3(2010 年 8 月 15 日,2012 年 1 月 2 日 17:38:47 编译)MacOS X (unix) 版本包含的补丁:1-390

标签: vim


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 2017-03-08
    • 2016-09-03
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多