Vim - Existe uma maneira de obter feedback visual imediato durante o Insert no Visual Block Mode?

3

Costumo pressionar:

  • <Ctrl> V para entrar no modo de bloco visual e destacar uma coluna
  • pressione <shift>-i (para inserir no início da linha), digite algumas coisas (neste ponto, vejo minhas alterações na primeira linha, mas não em outras).
  • e, em seguida, pressione <Esc> para voltar ao modo normal.

Depois de atingir <Esc> , vejo que as coisas que inseri são colocadas em cada uma das outras linhas.

O que eu gostaria é ver visualmente as minhas alterações em cada linha, conforme digito, em vez de apenas na primeira linha. Isso é possível?

Entre no bloco visual e selecione várias linhas

Acertar<Shift>i

Adicionealgumtexto-Estaéapartequegostariadealterar.Eugostariaqueosespaçosfossemimediatamentevisíveisemtodasaslinhas,nãoapenasnaprimeiralinha.

HitEscape-Agoraosespaçossãoadicionadosemtodasaslinhas.Eugostariaqueissoacontecessemaiscedo.

Eu sei que poderia ter feito o que fiz neste exemplo com >> . Escolhi um exemplo simplificado para ilustrar o que gostaria de alterar.

Obrigado!

    
por JoshuaD 03.01.2016 / 02:47

1 resposta

2

Tente adicionar isso ao seu 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

Em seguida, pressione Ctrl-v I como de costume e, em seguida, pressione F12 . Ele irá inserir e mostrar todas as linhas alteradas para cada pressionamento de tecla.

Nota: O script seria melhor se pressionar F12 entraria no modo de inserção, em vez de exigir que você pressionasse I a cada vez. Talvez o comando startinsert em combinação com vnoremap possa fazer isso.

    
por 03.01.2016 / 05:46

Tags