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。它将插入并显示每次击键更改的所有行。

F12注意:如果按会进入插入模式,脚本会更好,而不是要求您I每次都按。也许startinsert命令结合起来vnoremap可以做到这一点。

相关内容