Розуміння комбінації CTRL-U


20

У цій відповіді я зіткнувся з 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?

А крім того, це робить щось дивне в режимі вставки. Наскільки я зрозумів, він видаляє все від курсору до початку рядка, а потім приєднує отриманий рядок і рядок вище.

Відповіді:


28

Довідка за замовчуванням повертає всі відображення, які застосовуються до звичайного режиму. У нормальному режимі, <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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.