我正在编写一个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
答案 0 :(得分:7)
TL; DR:是的。您可能应该使用
exec "!git_difftool " . l:left_sha . " " . l:right_sha
Bang命令会将其后的所有内容传递到终端,而无需vim触摸它(因为shell命令不使用vim语法)。要获取变量解释,请将其作为exec命令来创建bang命令。
编辑:
如果您需要静音,只需在行前加上silent