Повторите команду, вызванную из меню - PullRequest
4 голосов
/ 16 марта 2011

Я создал много команд меню в VIM.

. повторяет последнюю команду в обычном режиме.
@: повторяет последнюю команду из командной строки

Есть ли способповторить последнюю команду, вызванную из меню vim ?

Обновление:

пример команды меню:

an 98.80.00 &MyMenu.Test\ :call <SID>Test("%")<CR>

ЕслиЯ использую эту команду меню, созданную мной, как я могу повторить ее еще раз (повторите последнюю использованную команду меню)?
В приведенном выше случае это будет :call <SID>Test("%")<CR>
Я не могу найти эти команды в истории командной строки.
@: и :<UP> не работают

Кто-нибудь знает, где Vim сохраняет вызовы функций / действия команд меню?

Update2

Кент предложил построить функцию вокруг вышеуказанной команды:

an 98.80.00 &MyMenu.Test\ :call SubExe('call <SID>Test("%")')<CR>

 function! SubExe(argument)
  let g:lastcommand = a:argument
  exe g:lastcommand
 endfun

Кажется, работает, недостаток в том, что у меня естьизменить все текущие команды;)

Ответы [ 2 ]

3 голосов
/ 11 августа 2014

Если встроенной поддержки нет, вы должны создать ее самостоятельно, если она так важна для вас. Основная идея:

Вы создаете функцию, например, ExecMenuCmd(cmd), аргумент - это команда, например wq, в функции, вы сохраняете команду в переменную, а затем выполняете ее.

Затем вы можете создать отображение, чтобы «повторить» последний cmd меню, прочитав переменную и выполнив.

Когда вы создаете пункты меню, вы делаете что-то вроде:

:menu File.SaveAndExit :call ExecMenuCmd('wq')

Если хотите, вы можете сохранить стек для хранения команд, запускаемых меню, для реализации дополнительных функций.

0 голосов
/ 27 марта 2011

Вы можете сделать отображение в вашем .vimrc для входа в командный режим, а затем для запуска последней команды. Что-то вроде:

noremap <F8> :<Up><Cr>

Это будет повторять последнее, что вы запускали из командного режима, когда вы нажимаете F8 в обычном режиме. Вы можете изменить F8 на то, что вы хотите.

...