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

e キーバインディングが問題なく動作するのに、ビジュアルモード d キーバインディングがメッセージをまったく表示しない理由を誰でも説明できますか

この問題はキーバインドとはまったく関係がなく、入力関数の呼び出しの後に if ステートメントがあることに注意してください。

私はMercurialソースコードからコンパイルされた最新のvimバージョンでLinuxのMacVimとターミナルvimでテストしましたが、すべてこの問題があります

更新:問題が何であるかを理解していない人もいました。詳しく説明すると、ビジュアル モードで d を押すと入力プロンプトが表示され、それに答えるとコマンド ラインにメッセージは表示されませんが、e を押してプロンプトに答えると、メッセージ hi hi hi が 2 回表示されます。行と「Press ENTER or type command to continue」というメッセージ

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 に答える