Vim - ビジュアルブロックモードへの挿入中にすぐにビジュアルフィードバックを受け取る方法はありますか?

Vim - ビジュアルブロックモードへの挿入中にすぐにビジュアルフィードバックを受け取る方法はありますか?

私はしばしば次を押します:

  • <Ctrl> Vビジュアルブロッキングモードに入り、熱強調表示
  • (行の先頭に挿入)をクリックし<shift>-iて内容を入力します(この時点で最初の行には変更は表示されますが、他の行には変更は表示されません)。
  • その後、クリックして通常<Esc>モードに戻ります。

をクリックすると、<Esc>挿入した内容が他の行ごとに配置されることがわかります。

私が望むのは、最初の行だけでなく、入力したときに各行の変更を視覚的に確認することです。それは可能ですか?

Visual Block に移動して複数の行を選択します。 ここに画像の説明を入力してください。

勝つ<Shift> i ここに画像の説明を入力してください。

テキストを追加- 変えたい部分だ。最初の行だけでなく、すべての行にスペースをすぐに表示したいです。 ここに画像の説明を入力してください。

打って脱出- 各行にスペースが追加されます。このようなことがより早く起こることを願っています。 ここに画像の説明を入力してください。

私はこの例でやっていることを達成するためにそれを使用できることを知っています>>私は、変更したいことを説明するために簡単な例を選択しました。

ありがとうございます!

ベストアンサー1

これをあなたのvimrc:

nmap <buffer> <silent> <expr> <F12> InsertCol()
imap <buffer> <silent> <expr> <F12> InsertCol()

function! InsertCol()
    let w:first_call = exists('w:first_call') ? 0 : 1
    "if w:first_call
    "    startinsert
    "endif
    try
        let char = getchar()
    catch /^Vim:Interrupt$/
        let char = "\<Esc>"
    endtry
    if char == '^\d\+$' || type(char) == 0
        let char = nr2char(char)
    endif " It is the ascii code.
    if char == "\<Esc>"
        unlet w:first_call
        return char
    endif
    redraw
    if w:first_call
        return char."\<Esc>gvA\<C-R>=Redraw()\<CR>\<F12>"
    else
        return char."\<Esc>gvlA\<C-R>=Redraw()\<CR>\<F12>"
    endif
endfunction

function! Redraw()
    redraw
    return ''
endfunction

次に、いつものCtrl-vIようにを押し、次にを押しますF12。各キーストロークに変更されたすべての行を挿入して表示します。

F12Iメモ:毎回押すよりも押して挿入モードに入ると、スクリプトが良いでしょう。たぶん、startinsertコマンドの組み合わせでvnoremapこれを行うことができます。

おすすめ記事