重复从菜单调用的命令

时间:2011-03-16 19:24:51

标签: vim menu command repeat

我在VIM中创建了许多菜单命令。

.在正常模式下重复最后一个命令 @:重复命令行

中的最后一个命令

有没有办法重复从vim的菜单调用的最后一个命令?

更新

示例菜单命令:

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

如果我使用自己创建的菜单命令,我该如何重复它(重复上次使用的菜单命令)? 在上述情况下,它将是:call <SID>Test("%")<CR>
我在命令行历史记录中找不到这些命令 @::<UP>不起作用

有人知道Vim保存函数调用/菜单命令操作的位置吗?

UPDATE2

Kent建议围绕上述命令构建一个函数:

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 个答案:

答案 0 :(得分:3)

如果没有内置支持,您必须自己构建一个支持,如果它对您来说非常重要的话。基本理念是:

您可以在函数中创建一个函数,如ExecMenuCmd(cmd)参数是命令,如wq,将命令保存到变量中,然后执行它。

然后你可以创建映射到&#34;重复&#34;最后一个菜单cmd通过读取变量并执行。

创建菜单项时,您可以执行以下操作:

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

如果您愿意,可以维护一个堆栈来存储菜单触发的命令,以实现更多功能。

答案 1 :(得分:0)

您可以在.vimrc中进行映射以进入命令模式,然后运行最后一个命令。类似的东西:

noremap <F8> :<Up><Cr>

只要在正常模式下按F8,这将重复从命令模式运行的最后一件事。您可以将F8更改为您想要的任何内容。