我正在尝试使用 shell 获取“svn log %”。为了将其放入不同的缓冲区,似乎最好的方法是调用:
:new | set buftype=nowrite | r !svn log #
将r
shell 命令的输出放入从中创建的缓冲区new
,并#
引用前一个缓冲区的文件名。我遇到的问题是,我的默认 shell 是 DOS,而我的 svn 是 cygwin。我得到
svn: E155010: The node '/e/code/branch\project\myproject\main.cpp' was not found.
因此看起来 shell 正在传递 DOS 路径,而 svn 正在将其解释为基本路径/e/code/branch
,然后使用 -- 附加其余路径\
,这会使自己感到困惑。
我也尝试过:
silent exec "r !bash -c \"svn log `cygpath -u \'" . file . "\'`\""
但是我尝试验证用户身份。这很奇怪,因为当我从“开始”菜单或命令 shell 运行相同的命令时,我不需要登录。
我该如何让 svn 正常工作?有没有人有适合 svn 的 vim 插件?
答案1
通过制作函数 SVNLog,我解决了路径问题:
function! SVNLog()
cd e:/code/wws_shared/sdk
let file = system("cygpath -u '" . expand("%:p") . "'")
new
silent exec "r !svn log " . file
endfunction
我仍然有身份验证问题,以下输出被传输到我的临时文件:
Authentication realm: <http://svn.mydomain.com:80> Subversion Repository
Password for 'jh':
我通过将silent exec ...
上述内容更改为来解决这个问题exec "!svn log " . file
,运行一次,输入密码,再改回原来的样子。