2017-07-26 48 views
2

我有一個構建腳本「maker」,我打算將其設置爲makeprg。該腳本需要兩個參數:flag_verboseflag_install,前者建議是否給出詳細輸出(對於每個程序),如果構建成功,則後者會導致安裝。如何給`makeprg賦予可變參數

現在我想設置一些關鍵映射,如: <F7-(a/d/j/z/i)> :make <return> :copen 在這裏我想攜帶一個參數製造商腳本。 flag_verboseflag_install分別由(a [apt}/d [x]/j [avac]/z [all])和'i [nstall]'組成。

所以基本上我想根據<FN-x>擊鍵爲腳本提供不同的參數,x是不同的標誌。 我可以在vimrc或vimscript中設置這樣的功能嗎?如果是這樣,怎麼樣?

回答

3

首先,有沒有<F7-a>符號,並不能定義被按F7 一個同時引發的映射。你可以做的是映射序列,編寫爲<F7>a

所以,你可以定義以下組映射:

nnoremap <F7>a :make a<CR>:copen<CR> 
nnoremap <F7>d :make d<CR>:copen<CR> 
... 

這可以通過元編程被簡化:

for s:arg in ['a', 'd', 'j', 'z', 'i'] 
    execute printf('nnoremap <F7>%s :make a<CR>:copen<CR>', s:arg) 
endfor 

但是我反而選擇這種解決方案,它準備不完整的命令行並將光標放置在將放置參數的位置。有了這個,你只有一個映射,並且可以傳遞沒有或多個參數。缺點是,你必須也按輸入啓動命令:這裏

noremap <F7> :execute 'make '<Bar>copen'<Left><Left><Left><Left><Left><Left><Left><Left> 
+0

,如果我做的:使[myArgs],將myArgs是通行證製作腳本? 其實這就是我困惑的地方。感謝第二個解決方案,它解決了一行中的問題,爲輸入提供了選擇,以及比循環更有效! – Harshiv

+2

是的,假設你有':set makeprg = maker'這樣的東西,他們會被通過。你也可以通過'$ *'指定參數的放置位置;請參閱':help:make_makeprg'。 –

+0

在'copen'之前不應該有':'這裏?或者因爲':execute'命令而不需要它?同樣,爲了簡單起見, ...序列可以由「8h」還是「8 」代替? – Harshiv