重复从菜单调用的命令

发布于 2024-10-22 19:23:13 字数 805 浏览 5 评论 0原文

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

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

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

更新:

示例菜单命令:

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

如果我使用自己创建的这个菜单命令,我如何再次重复它(重复上次使用的菜单命令)?
在上面的情况下,它将是 :callTest("%")
我在命令行历史记录中找不到这些命令。
@:: 不起作用

有谁知道 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

看起来可行,缺点是我必须更改所有当前命令;)

I created many menu commands in VIM.

. repeats the last command in normal mode.
@: repeats the last command from commandline

Is there a way to repeat the last command invoked from vim's menu?

Update:

example menu command:

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

If I use this Menu Command created by myself, how can I repeat it again (repeat last used menu command)?
In above case it would be :call <SID>Test("%")<CR>
I can't find these commands in command line history.
@: and :<UP> doesn't work

Does anyone know where Vim saves function calls/menu commands actions?

Update2

Kent proposed to build a function around the above command:

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

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

It seems to work, the disadvantage is that I have to change all current commands ;)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲世九天 2024-10-29 19:23:13

如果没有内置支持,如果它对您如此重要,您就必须自己构建一个。基本思想是:

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

然后,您可以通过读取变量并执行来创建到“重复”最后一个菜单命令的映射。

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

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

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

If there is no built-in support, you have to build one on your own, if it is so important to you. Basic idea is:

You create a function, like ExecMenuCmd(cmd) the argument is the command, like wq, in the function, you save the command into a variable, then execute it.

Then you can create mapping to "repeat" last menu cmd by reading the variable and execute.

When you create menu items, you do something like:

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

If you like, you could maintain a stack to store the commands triggered by menu, to implement more features.

熊抱啵儿 2024-10-29 19:23:13

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

noremap <F8> :<Up><Cr>

每当您在正常模式下按 F8 时,都会重复您从命令模式运行的最后一件事。您可以将 F8 更改为您想要的任何值。

You could make a mapping in your .vimrc for entering the command mode, and then running the last command. Something like:

noremap <F8> :<Up><Cr>

That will repeat the last thing you ran from command mode whenever you press F8 in normal mode. You can change F8 to whatever you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文