Если вы указали аргументы, а не только путь к exe, то вам, возможно, потребуется сделать несколько цитат, как показано ниже. Основная проблема не в самом exe-пути, а в аргументах. Я нашел эту веб-страницу полезной для подобных проблем самостоятельно:
http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx
Не уверен, что нет, и у вас нет времени на проверку, но если у вас есть аргумент в кавычках, то приведенный ниже пример может быть ближе к тому, что вам нужно:
silent! exe 'r!"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\TF.exe" history /followbranches \^"#\^"'
Кроме того, мне интересно, могут ли кавычки вокруг пути нуждаться в особой обработке, поскольку они составляют только часть полной команды. В любом случае кавычки \^"
работают для основных кавычек в командной строке и ^"
для кавычек, встроенных в другие кавычки. В прошлом я находил полезным поэкспериментировать с командой в командной строке Windows, не забывая проверять ее способом, которым ее готовит Vim, с вашей командой, к которой добавляется c:\windows\sys32\cmd.exe
.
Подумав еще раз, я думаю, что когда я работал с подобной проблемой, я никогда не доходил до точки решения команды с обоими аргументами в кавычках и кавычками exe-path-with-space в одной команде. Я ожидаю, что есть способ сделать это, но вместо этого я просто создал мягкую ссылку на exe в пути без пробелов. E.g.:
mklink c:\users\myname\myexe c:\program files(x86)\myapp\myexe.exe
После этого нет необходимости заключать в кавычки саму команду exe, и кавычка аргумента с \^"
работала нормально. Мне, конечно, любопытно, как процитировать exe-with-spaces
, который также цитирует аргументы.
РЕДАКТИРОВАТЬ: я думаю, что нашел способ обойти свою проблему с цитированием, не имею VS для тестирования с вашей точной командой, но вот что я думаю, может работать из командной строки:
cmd /k ""C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\TF.exe" history /followbranches ^"#^""
Если это работает для вас из командной строки, то, я думаю, единственная проблема заключается в том, чтобы Vim включил ключ / k. (Также может возникнуть проблема с тем, что командная строка Windows «выбросила» переключатель / followbranch из-за косой черты, но, возможно, нет.)
EDIT2: Я думаю, что хитрость для того, чтобы сделать это из Vim, состоит в том, чтобы просто включить 'cmd / k' как часть команды, которую вы выполняете. В итоге вы открываете несколько уровней снарядов, но я не думаю, что это проблема. Например, вот что запускается из Vim с (1) пробелами в пути exe, (2) аргументом в кавычках ((message .. )
) и даже (3) кавычкой в аргументе в кавычках (\^"hi\^"
). Эта команда открывает экземпляр Emacs и выводит сообщение Emacs "hi":
!cmd /k ""c:\program files (x86)\emacs\emacs\bin\emacs.exe" --eval ^"(message \^"hi\^")^""
И еще одно редактирование: включение вашего собственного 'cmd / k' создает проблемы, я думаю, если вы пытаетесь не просто выполнить внешнюю команду, но прочитать ее результат обратно в буфер Vim. В этом случае вы можете перенаправить вывод в файл в домашнем каталоге пользователя и использовать :read
для вставки в буфер. Если есть какой-то способ заставить собственный cmd Vim использовать k switch, тогда это будет ненужным, но если нет, то по крайней мере это обеспечит хороший обходной путь.