Показ історії команд з showcmd


11

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

Чи є спосіб показати повні команди? Наприклад, під час введення тексту dt.gU(спочатку dt.буде показано; а при запуску набору другої команди перша очищатиметься, щоб у підсумку відображалася лише gU(така.

Це може бути корисним, наприклад, для ілюстрації GIF; і перевірити, що ви ввели те, що хотіли, якщо у вас виникли якісь несподівані результати.


1
Що таке повна команда? Зображення dtвідображається тому, що він очікує на поточний оператор. Після того, як йому подано рух, він більше не очікує оператора. Припустимо, ми пішли далі, і зробили dt.gU(gu)dawчи так. Це все "одна повна команда", чи це чотири повні команди, чи щось інше?
davidlowryduda

@mixedmath для мене, що рахуватиметься як 4 команди. Другий абзац відповіді намагається розмежувати, що я маю на увазі.
Гонсало Рібейро

2
З точки зору Віма, dt.gU(це дві команди: dt. і gU(.... Тож, що ви дійсно хочете, це показати якусь історію команд (Vim вже показує "повних команд").
Мартін Турной

@Carpetsmoker, так, це може бути те, що я хочу. Дякуємо, що відредагували назву питання.
Гонсало Рібейро

3
Я ткнув у вихідний код Vim, працюючи над звичайною історією . У src/normal.cкодових викликів clear_showcmd()в декількох місцях ( normal_cmd(), do_pending_operator(), end_visual_mode()). Я граю зі скиданням файлу showcmd_bufв тих точках, що виглядало досить добре, але я впевнений, що ви не можете отримати те, що хочете, без аналогічної зміни вихідного коду Vim та відновлення його. Звичайно, робити це може вартувати клопоту, щоб зробити свої gif.
Джон О'М.

Відповіді:


9

Я не міг знайти жодного способу зробити це у звичайному Vim. Однак якщо ви готові виправити Vim, наступне може працювати для вас.

Дуже простий патч (застосований проти Vim-7.4.052) відключає фактичне оновлення на екрані, що очищає історію в кінці звичайної команди. Це робиться, повертаючи, встановлено чи ні showcmd_is_clearперед оновленням дисплея. (Як варіант, ви можете прокоментувати оператор if і залишити лише один оригінальний 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 для мого довгого реєстру, вказаного тиском.
  • Не відображається в складі, але натискання escв звичайному режимі відображається ^[в області showcmd

4

Крім рішення Джона , є ще один спосіб показати всі натискання клавіш vim, які були натиснуті, використовуючи -wпараметр, який записує всі символи, які ви вводите у файл. Проблема полягає в тому, що vim пише натискання клавіш лише при виході з Vim. Так працює VimGolf .

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

Перевірте власну збірку Vim, використовуючи гілку Drew в реальному часі-натискання клавіш MacVim, щоб отримати поточний потік натискань клавіш у реальному часі.

Джерело: Vimprint - аналізатор натискання клавіш Vim у блозі Дрю Ніл

Це корисно, якщо ви хочете виявити натиснуті клавіші Vim у відео-уроках чи GIF-файлах.

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