为什么SHIFT + V(可视行)不按CTRL + V(可视块)插入多行?

时间:2018-11-09 21:03:00

标签: vim

我很好奇,为什么我必须使用 visual block 选择插入到多行而不是 visual line

导致这种差异的幕后差异是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将其理解为“行模式”和“列模式”。您想在多行的同一上添加内容,请使用“ ctrl-v”(列模式)。

答案 1 :(得分:2)

逐块选择是更通用的选择,即它允许在任意位置插入多行。当然,您可以将按行(甚至按字符)选择视为这种情况的退化情况,但是它的通用性较低(按行只允许在第1列或行尾插入),因此默认情况下不提供;即IA仅在逐块可视模式下可用。但是,将它们添加到其他选择模式也很简单:

" {Visual}I, {Visual}A  Make I/A available in characterwise visual and linewise
"                       visual mode.
" Source: kana, http://whileimautomaton.net/
function! s:ForceBlockwiseVisualExpr()
    if mode() ==# 'v'
        return "\<Esc>g`<\<C-v>g`>"
    elseif mode() ==# 'V'
        return "\<Esc>g`<^\<C-v>g`>$"
    else
        return ''
    endif
endfunction
xnoremap <expr> <silent> I <SID>ForceBlockwiseVisualExpr() . 'I'
xnoremap <expr> <silent> A <SID>ForceBlockwiseVisualExpr() . 'A'