Nie możesz
Oto kod źródłowy C dla tego, co <C-w><C-i>
:
normal.c
:
/*
* This table contains one entry for every Normal or Visual mode command.
* The order doesn't matter, init_normal_cmds() will create a sorted index.
* It is faster when all keys from zero to '~' are present.
*/
static const struct nv_cmd
{
int cmd_char; /* (first) command character */
nv_func_T cmd_func; /* function for this command */
short_u cmd_flags; /* NV_ flags */
short cmd_arg; /* value for ca.arg */
} nv_cmds[] =
{
[...]
{Ctrl_W, nv_window, 0, 0},
};
[...]
/*
* CTRL-W: Window commands
*/
static void
nv_window(cmdarg_T *cap)
{
if (!checkclearop(cap->oap))
do_window(cap->nchar, cap->count0, NUL); /* everything is in window.c */
}
window.c
:
/*
* all CTRL-W window commands are handled here, called from normal_cmd().
*/
void
do_window(
[..]
) {
switch (nchar)
{
[..]
case 'i': /* Go to any match */
case Ctrl_I:
type = FIND_ANY;
/* FALLTHROUGH */
[..]
default: beep_flush();
break;
Nie jestem do końca pewien, gdzie type
zmienna jest pobierana, nie miałem ochoty na to patrzeć, ale chodzi o to, że nie ma prawdziwej możliwości powiedzenia „ten klucz jest przypisany do tej funkcji”. Jest to po prostu struct
mapowanie char
funkcji na funkcję, a implementacja drugiego naciśnięcia klawisza ( <C-i>
) jest po prostu brzydotą ad-hoc!
Różni się to od Emacsa, gdzie (przypuszczam) wszystko jest w Lisp, a twoje niestandardowe mapowania nie różnią się niczym od domyślnych mapowań Emacsa. Ale w Vimie masz „magiczne” mapowania, które są dostarczane przez kod C, które mapują funkcje C, które nigdy nie są ujawniane w Vimie. Zawsze mówię, że Vim ma lepszy pomysł, ale Emacs ma lepszą implementację ;-)
Więc jedynym sposobem jest sprawdzenie go w plikach pomocy. Dlatego zamknąłem to jako duplikat Jak nawigować do tematów w dokumentacji Vima, ponieważ jest to jedyna praktyczna odpowiedź , jaką może dać każdy. Rzeczywiście można argumentować, że można podać bardziej szczegółowe wyjaśnienie tego pytania (tak jak właśnie to uczyniłem), a gdybyście argumentowali, że zamiast dać odpowiedź (teraz usuniętą), prawdopodobnie powiedziałbym „ty” racja, przepraszam za błąd ”i ponownie go otworzyłem ;-)
W każdym razie, aby krótko zilustrować konwencje kilkoma przykładami:
:help w
- mapowanie trybu normalnego dla w
(rozróżniana jest wielkość liter);
:help g8
- mapowanie trybu normalnego dla g8
;
:help v_o
- mapowanie trybu wizualnego dla o
; inne tryby dotyczą c
wiersza poleceń i i
wstawiania;
:help CTRL-W
- mapowanie trybu normalnego dla <C-w>
;
:help i_CTRL-W
- mapowanie trybu wstawiania dla <C-w>
;
:help CTRL-W_CTRL-I
- mapowanie trybu normalnego dla <C-w><C-i>
;
:help i_CTRL-G_<Down>
- mapowanie trybu wstawiania dla <C-g><Down>
.