Я пытаюсь определить макрос, который быстро генерирует список случайных слов.
Я хочу, чтобы макрос превратил это в список вроде
a
b
c
d
e
в это
arezzo
bywords
czars
détente
eyrie
Что у меня так далеко:
- наведите курсор на букву
a - начать запись макроса
qq aвойти в режим вставки<C-x><C-k> - perform dictionary completion on the character before cursor - in this case the lettera`<C-p>выберите последний элемент в списке завершения, который появляется, в моей системе это словоarezzo. (Примечание: яlongestвключил в свои'completeopt'настройки, которые необходимы для<C-p>работы таким образом во время завершения:)'set completeopt=longest,menuone,preview'.<C-y>принять завершение^[^[выход из режима вставкиjперейти на следующую строку, готовый сделать ту же операцию на следующей строкеqостановить запись
когда я создаю макрос и выполняю шаги вручную, все работает нормально, однако когда я выполняю макрос, я вижу сообщение, вспыхивающее в командной строке, что-то вроде:
сканирование файла словаря
и ничего не происходит, из команд в макросе только jвыполняется, то есть курсор перемещается вниз по линии, но ни одна из команд завершения не выполняется.
Можно ли использовать завершение режима вставки в макросе, и если да, то как я могу это сделать?
set completeopt=longest,menuone,previewего longestвариант, который вызывает <C-p>немедленную вставку. Если я удалю longestиз completeoptстроки, я получу то же поведение, что и вы. Кроме того, да, клавиши со стрелками работали! спасибо (я забыл, что вы можете использовать их для навигации по списку завершения)
:set completeopt=и a<c-x><c-k><esc>jкак ваш макрос.
<C-p>шаг ... когда я делаю это в моем vim, он просто выдает сообщениеback at original- не выбирает последний элемент ... Я дважды использовал клавишу со стрелкой вверх, чтобы выбрать последнее слово (мой случайazures), нажал Enter и тогдаEsc+j+q.. тогда он работает довольно хорошо при выполнении макроса