Понимание комбинации CTRL-U

19

В этом ответе я столкнулся с CTRL-Uвызовом используемой функции после :и до фактического имени функции.

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

Вот что говорит помощь:

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

Я попробовал это сам, и это сработало, как я предполагал. Но я не совсем понял часть о scrollварианте. Что они имеют в виду 'scroll' option?

И кроме того, он делает что-то странное в режиме вставки. Насколько я понял, он удаляет все от курсора до начала строки, а затем соединяет результирующую строку и строку выше.

user3663882
источник

Ответы:

27

Справка по умолчанию возвращает все сопоставления, которые применяются в обычном режиме. В обычном режиме <C-u> выполняет прокрутку вверх, но это не то, что нас интересует. Чтобы посмотреть, что <C-u>делает поиск в режиме командной строки или cmode (режим, в котором вы вводите команды, начинающиеся с двоеточия):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>

Чтобы понять, почему это полезно для отображения нормального режима, попробуйте удалить его, попробуйте ввести что-то вроде 5:и посмотреть, что получится. Вы должны увидеть что-то вроде:

:.,.+4

Это диапазон

Теперь попробуйте набрать 5:<C-u>и посмотреть, что подходит. Вы должны просто увидеть

:

Аналогично в визуальном режиме нажатие :вставляет диапазон

:'<,'>

Вот почему вы очень часто видите такие сопоставления:

nnoremap foo :<C-u>bar

или

xnoremap foo :<C-u>bar
DJMcMayhem
источник