2013-09-23 222 views
2

我試圖設置幾個映射來快速處理合並衝突。這裏是我的代碼:函數參數未評估

func! DiffAccept(w) 
    diffget a:w 
    diffupdate 
    normal ]c 
endfunc 

noremap dh :exec DiffAccept("//2")<CR> 
noremap dl :exec DiffAccept("//3")<CR> 

每次我嘗試使用此我得到「無匹配的緩衝區爲:W」。我清楚地使用這個變量是錯誤的,但是當我將行更改爲「echo a:w」時,它會按預期行事。

回答

5

Vim的評估規則與大多數編程語言不同。您需要使用:execute來評估(函數參數)變量;否則,它的字面(作爲緩衝名):

execute 'diffget' a:w 

PS:使用:normal!(與!)婚姻;這避免了映射的干擾。

+0

+1 btw @Ingo,'exec'foo'.'bar''和'exec'foo''bar'',你更喜歡哪種格式? – Kent