使vimscript bang命令解释vim变量

Leo*_*ard 3 vim

我正在编写一个vimscript工具,使我可以通过调用git difftool从当前vim会话中查看git diff。当我对两个sha值进行硬编码时,此方法可以很好地工作,但是当我尝试将它们指定为变量时,该方法将失败。我写了两行shell脚本do_git_difftool来探讨问题,它显示出传递了文字变量名称“ l:left_sha”和“ l:right_sha”而不是传递值,即使它们在echom中已正确解释了也是如此。在上一行。是什么赋予了?

function! s:GitDiff (...)

     let l:the_count = 1
     :let l:syscommand = "get_sha back " . l:the_count
     :let l:left_sha = system(l:syscommand)
     :let l:syscommand = "get_sha top"
     :let l:right_sha = system(l:syscommand)
     echom "sha values"  l:left_sha l:right_sha

     :silent !git difftool l:left_sha l:right_sha
     :silent !do_git_difftool l:left_sha l:right_sha

endfunction

# in a bash script named do_git_difftool 
echo args are $1 and $2 > thelog
git difftool $1 $2

  in the log file I see: 

args are l:left_sha and l:right_sha
Run Code Online (Sandbox Code Playgroud)

jer*_*ile 7

TL; DR:是的。您可能应该使用

exec "!git_difftool " . l:left_sha . " " . l:right_sha
Run Code Online (Sandbox Code Playgroud)

Bang命令将把它们之后的所有内容传递到终端,而无需vim触摸它(因为shell命令不使用vim语法)。要获取变量解释,请将其作为exec命令来创建bang命令。

编辑:

如果您需要保持静音,只需在行前面加上 silent