Zrozumienie kombinacji CTRL-U


19

W tej odpowiedzi spotkałem się z CTRL-Uużytym w wywołaniu funkcji po :i przed rzeczywistą nazwą funkcji.

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

Oto, co mówi pomoc:

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

Sam spróbowałem i zadziałało tak, jak przypuszczałem. Ale nie do końca zrozumiałem część dotyczącą tej scrollopcji. Co one oznaczają 'scroll' option?

A poza tym robi coś dziwnego w trybie wstawiania. O ile rozumiem, usuwa wszystko od kursora do początku linii, a następnie łączy wynikową linię i linię powyżej.

Odpowiedzi:


27

Pomoc domyślnie zwraca wszystkie mapowania, które dotyczą trybu normalnego. W trybie normalnym, <C-u> czy przewijania w górę, ale to nie jest to, co nas interesuje. Aby zobaczyć, co <C-u>robi w trybie wiersza poleceń lub cmode (tryb gdzie wpisujesz komendy zaczynające się dwukropkiem) Szukaj: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>

Aby zrozumieć, dlaczego jest to przydatne do mapowania w trybie normalnym, spróbuj go usunąć, spróbuj wpisać coś takiego 5:i zobacz, co się pojawi. Powinieneś zobaczyć coś takiego:

:.,.+4

To jest zakres

Teraz spróbuj pisać 5:<C-u>i zobacz, co się pojawi. Powinieneś po prostu zobaczyć

:

Podobnie w trybie wizualnym naciśnięcie powoduje :wstawienie zakresu

:'<,'>

Dlatego bardzo często można zobaczyć mapowania takie jak:

nnoremap foo :<C-u>bar

lub

xnoremap foo :<C-u>bar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.