Entendendo a combinação CTRL-U

19

Em esta resposta que enfrentou o CTRL-Uusado na chamada de função após :e antes do nome da função real.

:nnoremap <buffer> <cr> :<C-U>call append('.', repeat([''],v:count1))<cr>

Aqui está o que a ajuda diz:

CTRL-U      Scroll window Upwards in the buffer.  The number of
            lines comes from the scroll option (default: half a
            screen).  If [count] given, first set the 'scroll'
            option to [count].

Eu mesmo tentei e funcionou como eu supunha. Mas não entendi bem a parte sobre a scrollopção. O que eles significam 'scroll' option?

E, além disso, faz alguma coisa estranha no modo de inserção. Tanto quanto eu entendi, ele exclui tudo do cursor até o início da linha e, em seguida, une a linha resultante e a linha acima.

user3663882
fonte

Respostas:

27

A Ajuda, por padrão, retorna todos os mapeamentos que se aplicam ao modo normal. No modo normal, <C-u> faz rolagem para cima, mas não é isso que nós estamos no interessados. Para ver o que <C-u>faz no modo de linha de comando, ou cômodos , (o modo de onde você digita comandos começando com dois pontos) pesquisa:h c_CTRL-u

                            *c_CTRL-U*
CTRL-U      Remove all characters between the cursor position and
        the beginning of the line.  Previous versions of vim
        deleted all characters on the line.  If that is the
        preferred behavior, add the following to your .vimrc: >
            :cnoremap <C-U> <C-E><C-U>

Para entender por que isso é útil para um mapeamento de modo normal, tente removê-lo, digite algo como 5:e veja o que aparece. Você deve ver algo como:

:.,.+4

Este é um intervalo

Agora tente digitar 5:<C-u>e veja o que aparece. Você deveria ver

:

Da mesma forma no modo visual, pressionar pressiona :o intervalo

:'<,'>

É por isso que você frequentemente vê mapeamentos como:

nnoremap foo :<C-u>bar

ou

xnoremap foo :<C-u>bar
DJMcMayhem
fonte