Як дізнатися, для чого відображений ключ?


13

Я знаю, що запуск :mapкоманд без аргументів повинен дати мені список визначених користувачем відображень, але, наприклад, коли я натискаю Ctrl-W Ctrl-я щось трапляється, але я не маю поняття, яка функція щойно відбулася як вбудовані відображення не відображаються в :mapкомандах.

Як дізнатися, що робить ключ?



Не зовсім. У emacs я можу зайти Ctrl-H k натиснути клавішу, про яку я хочу знати, і вона дасть мені обов'язкову інформацію. Віму, здається, не вистачає цієї функції. Як дізнатися, на яку карту поєднується певна комбінація клавіш?
— Mad Wombat

Ви читали позначений дублікат? Тому що це говорить про те, як запитувати довідкову систему Vim на цю інформацію (пункт списку № 8): :help CTRL-W_CTRL-Iабо:help CTRL-W_i
— Martin Tournoij

2
Я проголосував за повторне відкриття, тому що форма запитання після редагування має корисну іншу відповідь (": карта <Ключі> для друку активних відображень"), ніж те, що є у пов'язаному на даний момент дублікаті про навігацію довідки.

1
Але ОП, здається, це знає, це його перша фраза. Було б непогано, щоб Vim мав можливість показати (подібним чином) всі неотоплені ключі, тобто те, що вони роблять за замовчуванням.
— VanLaser

Відповіді:


10

Ви не можете.

Ось вихідний код C, що <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;

Я не зовсім впевнений, де ця typeзмінна потрапляє, мені не здавалося, що я шукаю це, але справа в тому, що немає реальної можливості сказати "цей ключ відображений у цій функціональності". По суті, це лише те, structщо відображає функцію chara, а реалізація другого натискання клавіш ( <C-i>) - це просто спеціальне неподобство!

Це відрізняється від Emacs, де (я припускаю) все є в Lisp, а ваші власні відображення нічим не відрізняються від відображень за замовчуванням Emacs. Але у Vim у вас є "магічні" відображення, які надаються кодом C, який відображає проти C функцій, які ніколи не виявляються у Vim. Я завжди кажу, що Vim має кращу ідею, але Emacs має кращу реалізацію ;-)

Тож єдиний спосіб - це шукати у файлах довідки. Ось чому я закрив це як дублікат статті Як перейти до тем документації Vim, оскільки це єдина практична відповідь, яку кожен може дати. Можна справді стверджувати, що можна було б дати більш поглиблене пояснення до цього питання (як я щойно робив), і якби ви стверджували, що замість того , щоб давати відповідь (тепер видалену), я, мабуть, сказав би "ви" знову право, вибачте за помилку "і знову відкрив її ;-)

У будь-якому випадку, щоб коротко проілюструвати конвенції з деякими прикладами:

  • :help w- відображення у звичайному режимі для w(залежно від регістру);
  • :help g8- відображення нормального режиму для g8;
  • :help v_o- візуальне відображення режиму o; інші режими призначені cдля командного рядка та iдля вставки;
  • :help CTRL-W- відображення нормального режиму для <C-w>;
  • :help i_CTRL-W- відображення режиму вставлення <C-w>;
  • :help CTRL-W_CTRL-I- відображення нормального режиму для <C-w><C-i>;
  • :help i_CTRL-G_<Down>- вставити відображення режиму для <C-g><Down>.

1
Один важливий момент: допомога, яка, здається, завжди залишається осторонь, - це те, що викликається commandline completionу довідці vim за допомогою CTRL-D (я називаю це "пошук у допомозі"). Введіть :h CTRL-Wпотім натисніть <CTRL-D>, і ви отримаєте список всіх команд , що містять рядок «CTRL-W», наприклад, CTRL-W, CTRL-W_^, CTRL-W-<Down>, .... Введіть :h g8<CTRL-D>і ви побачите g8та 8g8як доступні довідкові теми. Без цього потрібно точно ввести тему довідки, і знайти точний рядок, який працює, складно.
— JESii


1

Я думаю, ви можете отримати відображення за допомогою наступних команд

:nmap - Mapping on normal mode
:cmap - Mapping on command mode
:vmap - Mapping on visual mode

Сподіваюся, це допомагає!


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