Отображение истории команд с помощью showcmd

11

При использовании set showcmdVim показывает частичные команды в последней строке экрана. Например, в обычном режиме при вводе команды dt.отображается последняя строка, dtа затем, когда вы нажимаете .команду, команда завершена и, следовательно, ничего не отображается.

Есть ли способ показать полные команды? Например, при вводе текста будет показано dt.gU(первое dt.; и при начале ввода второй команды первая будет очищена, так что в конце gU(будет отображаться только один.

Это может быть полезно, например, для иллюстрации GIF; и проверить, что вы набрали то, что вы хотели, если вы столкнулись с неожиданным результатом.

Гонсалу Рибейро
источник
1
Что такое полная команда? dtПоказано , потому что это оператор тока в ожидании. Как только он получил ходатайство, он больше не находится в состоянии ожидания оператора. Предположим, мы пошли дальше, и сделали dt.gU(gu)dawили так. Это все «одна полная команда», или четыре полные команды, или что-то еще?
Давидловрыдуда
@mixedmath для меня это будет считаться 4 командами. Второй абзац ответа пытается понять, что я имею в виду.
Гонсалу Рибейру,
2
С точки зрения Vim, dt.gU(есть две команды: dt. и gU(.... То, что вы действительно хотите, это показать какую-то историю команд (Vim уже показывает «полные командиры»).
Мартин Турной
@Carpetsmoker, да, это может быть то, что я хочу. Спасибо за редактирование названия вопроса.
Гонсалу Рибейру,
3
Я копался в исходном коде Vim, работая над обычной историей . В src/normal.cкодовых вызовов clear_showcmd()в нескольких местах ( normal_cmd(), do_pending_operator(), end_visual_mode()). Я играю с дампом в файл showcmd_bufв тех точках, который выглядел довольно неплохо, но я уверен, что вы не можете получить то, что хотите, без аналогичного изменения исходного кода Vim и его перестройки. Конечно, это может стоить хлопот, чтобы сделать ваши гифки.
Джон ОМ.

Ответы:

9

Я не мог найти способ сделать это в обычном Vim. Однако, если вы хотите установить Vim, то вам может помочь следующее.

Очень простое исправление (примененное к Vim-7.4.052) отключает фактическое обновление экрана, который очищает историю в конце обычной команды. Это делается путем возврата того, установлено или нет значение showcmd_is_clearперед обновлением дисплея. ( в качестве альтернативы, вы можете закомментировать , если заявление и оставить только одну оригинальную returnстроку. примечание : Пластырь ниже не паста очень хорошо, вы , возможно , придется применить это вручную, хотя это только короткий один вкладыш. примечание Я не закомментировал фактическое, display_showcmd()потому что оно, кажется, используется в визуальном режиме для обновления отображения количества выбранных строк или другого, возможно, другого материала. Я не тестировал это всесторонне.

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Результат выглядит так:

Скринкаст с патчем

Несколько интересных вещей для заметки:

  • Это показывает , даже простые движения, как j, k, bи т.д.
  • Команда xфактически становится dlв showcmd_buf.
  • Команды, изменяющие нижнюю строку, стирают область showcmd (например, с помощью :команды или входа в режим вставки (по крайней мере, в моей настройке))
  • Программа захвата перестала записывать много ударов после того, как я набрал a ", но моя последовательность клавиш видна в окне vim для моего длинного регистра, указанного yank.
  • Не показан в актерском составе, но удар escв обычном режиме показывает ^[в области showcmd
Джон ОМ.
источник
4

Помимо решения John , есть еще один способ показать все нажатия клавиш vim, которые были нажаты с помощью -wпараметра, который записывает все символы, которые вы вводите в файл. Проблема в том, что vim записывает нажатия клавиш только при выходе из Vim. Вот как работает VimGolf .

Чтобы обойти это, Kana Natsuno разработала этот однострочный патч , который отключает буферизацию -wопции, поэтому у вас есть доступ к потоку нажатий клавиш в реальном времени. Затем их нужно прочитать (например tail -f), проанализировать, или вы можете попытаться отобразить их в строке состояния ( :set statusline).

Изучите пользовательскую сборку Vim, используя ветвь нажатий клавиш live-stream от MacVim, чтобы получить поток нажатий клавиш в реальном времени.

Источник: Vimprint - синтаксический анализатор нажатий клавиш Vim в блоге Drew Neil

Это полезно, если вы хотите показать нажатия клавиш Vim в видеоуроках или GIF-файлах.

kenorb
источник