Comprender la combinación CTRL-U

19

En esta respuesta, me enfrenté a la CTRL-Ullamada de función utilizada después :y antes del nombre de la función real.

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

Esto es lo que dice la ayuda:

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].

Lo intenté yo mismo y funcionó como suponía. Pero no entendí bien la parte sobre la scrollopción. ¿Qué quieren decir 'scroll' option?

Y además hace algo extraño en el modo de inserción. Según tengo entendido, elimina todo, desde el cursor hasta el comienzo de la línea, y luego une la línea resultante y la línea de arriba.

usuario3663882
fuente

Respuestas:

27

La ayuda, por defecto, devuelve las asignaciones que se aplican al modo normal. En el modo normal, <C-u> se desplaza hacia arriba, pero eso no es lo que nos interesa. Para ver qué <C-u>hace en el modo de línea de comandos, o cmode , (el modo en el que escribe comandos que comienzan con dos puntos) busque: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 qué esto es útil para un mapeo en modo normal, intente eliminarlo, intente escribir algo como 5:y vea qué ocurre. Deberías ver algo como:

:.,.+4

Este es un rango

Ahora intente escribir 5:<C-u>y vea qué ocurre. Deberías ver

:

Del mismo modo en modo visual, presionar :inserta el rango

:'<,'>

Es por eso que con frecuencia verás asignaciones como:

nnoremap foo :<C-u>bar

o

xnoremap foo :<C-u>bar
DJMcMayhem
fuente