使vimscript bang命令解释vim变量

时间:2019-03-18 18:31:21

标签: vim

我正在编写一个vimscript工具,使我可以通过调用git difftool从当前vim会话中查看git diff。当我对两个sha值进行硬编码时,此方法工作正常,但是当我尝试将它们指定为变量时失败。我编写了一个2行的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

1 个答案:

答案 0 :(得分:7)

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

exec "!git_difftool " . l:left_sha . " " . l:right_sha

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

编辑:

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