Команда vimscript bang интерпретирует переменные vim - PullRequest
3 голосов
/ 18 марта 2019

Я пишу инструмент vimscript, который позволит мне просматривать git diff из моего текущего сеанса vim, вызывая git difftool. Это прекрасно работает, когда я жестко кодирую два значения ша, но не удается, когда я пытаюсь указать их как переменные Я написал двухстрочный сценарий оболочки 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 Ответ

7 голосов
/ 18 марта 2019

TL; DR: да.Вам, вероятно, следует использовать

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

Команды Bang передадут все после них на терминал, не касаясь vim (поскольку команды оболочки не используют синтаксис vim).Чтобы получить интерпретацию переменных, сделайте ее командой exec для создания команды bang.

Редактировать:

Если вам нужно это беззвучно, просто добавьте в строку silent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...