2013-07-31 31 views
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

與除第一個相同的關鍵字( 「%」, 「 '<,'>」)

有沒有辦法將它們合併在一起?

體育是否有可能這樣做:

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

並檢查功能,如果正常模式或視覺模式是活動?

+0

我想問一下,爲什麼你喜歡的':地圖:在'menu'命令'命令!? – user1146332

+0

@ user1146332,嗨,回答你的問題:使用菜單命令,我可以將它添加到gui界面的下拉菜單中。 – Reman

+0

我知道這一點,但是你真的在你的vim會話中使用菜單!?只是出於好奇。 – user1146332

回答

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 
+0

能否請您給一個簡短的例子,如何在一個循環元編程來做到這一點(或者告訴我在哪裏閱讀更多關於這一點)? – Reman

+0

@Remonn:你在。我希望這有幫助。 –

+0

謝謝Ingo K. – Reman

相關問題