2

我有很多这样的菜单条目:

nnoremenu <silent> 94.015.10 &MyMenu.Test\   :call Test("%","keyw2",keyw3")<CR>
vnoremenu <silent> 94.015.10 &MyMenu.Test\   :<C-U>call Test("'<,'>","keyw2",keyw3")<CR>

一个用于普通模式“ nnoremenu ”,
一个用于可视模式“ vnoremenu

除了第一个关键字("%","'<,'>")之外,使用相同的关键字

有没有办法将它们合并在一起?

pe 是否可以这样做:

an <silent> 94.015.10 &MyMenu.Test\   :call Test("","keyw2",keyw3")<CR>

并在功能内检查正常模式或视觉模式是否处于活动状态?

4

1 回答 1

1

使用:an时,可视模式会通过 自动中止<C-C>。这意味着无法再检索模式(并且您的<C-U>前缀不是必需的);如果您需要模式信息,则必须保留两个不同的菜单定义。

如果您想减少代码重复,您必须使用其他方法,例如元编程(即:executing在循环中构建和菜单定义命令)。

编辑:根据要求,这是我将如何解决此问题以避免重复的示例:

for [mode, range] in [['n', '%'], ['v', "'<,'>"]]
    execute printf('%snoremenu <silent> 94.015.10 &MyMenu.Test\   :call Test(%s,"keyw2","keyw3")<CR>', mode, string(range))
endfor
于 2013-08-01T11:09:08.570 回答