VIM: Як перевірити, чи працює поточний скрипт у макросі?


1

У ряді випадків я маю деякий скрипт vim, який я хочу виконати тільки тоді, коли він не виконується в макросі. Наприклад, в деяких випадках я блимаю курсор, щоб нагадати собі, де він знаходиться зараз (що не має сенсу при запуску в макросі, і просто призводить до того, що макрос займе 10 разів).

Тому для цих випадків я хотів би перевірити, чи він працює як макрос, і уникати непотрібних операцій у цьому випадку. Я розшукував допомогу для трохи, але не міг знайти прапор для виявлення цього. Це можливо?


Як ви ініціюєте мигання? Якщо це відображення, не використовуйте його. Якщо це autocmd, використовуйте подію, яка не спрацьовує під час макросу, наприклад CursorHold. Або запускайте кожен макрос за допомогою команди, яка тимчасово виконує функцію миготіння.
romainl

Відповіді:


2

Такої функції немає mode() або спеціальні v:macro_running змінна, і багато хто буде стверджувати, що вони просто заохочуватимуть погані практики.

Ви можете скористатися поведінкою feedkeys(), чиї передані ключі зазвичай виконуються відразу після команди / відображення, але тільки в самому кінці виконання макросу. Якщо ви помістіть ваші довгострокові команди там, вони будуть сповільнювати звичайні команди, як звичайно, але тільки (кумулятивно) сповільнюються після виконання макросу (і ви можете припинити те, що з <C-C> ).

Приклад

let @q = ',a,b'

Замість:

nnoremap ,a aHello<Esc>2gs
nnoremap ,b aWorld<Esc>2gs

використання

nnoremap ,a aHello<Esc>:call feedkeys('2gs', 'n')<CR>
nnoremap ,b aWorld<Esc>:call feedkeys('2gs', 'n')<CR>

Це негайно вставить все HelloWorld текст всередині макросу.

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