Я пытаюсь определить макрос, который быстро генерирует список случайных слов.
Я хочу, чтобы макрос превратил это в список вроде
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 letter
a`<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
.. тогда он работает довольно хорошо при выполнении макроса