函数参数没有评估

Gre*_*bur 2 vim vimdiff

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

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

noremap dh :exec DiffAccept("//2")<CR>
noremap dl :exec DiffAccept("//3")<CR>
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 5

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

execute 'diffget' a:w
Run Code Online (Sandbox Code Playgroud)

PS:喜欢使用:normal!(带!); 这避免了映射的干扰.