函数参数没有评估

时间:2013-09-23 19:18:48

标签: vim vimdiff

我正在尝试设置几张地图以快速完成合并冲突。这是我的代码:

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

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

每当我尝试使用它时,我得到“没有匹配的缓冲区:a:w”。我显然错误地使用了这个变量,但当我将该行更改为“echo a:w”时,它会按预期运行。

1 个答案:

答案 0 :(得分:5)

Vim的评估规则与大多数编程语言不同。您需要使用:execute来评估(函数参数)变量;否则,它按字面意思(作为缓冲区名称):

execute 'diffget' a:w

PS:首选使用:normal!!);这可以避免来自映射的干扰。