SVN的命令在目录层次结构中提交当前文件或目录或更高版本

时间:2010-10-12 22:42:32

标签: svn tortoisesvn vim

我的vimrc中有这个快捷方式:

map cmt :!start TortoiseProc.exe /command:commit /path:"%" /closeonend:3 <CR>

这样做的每当我按下'cmt'时,vim将打开我正在用vim编辑的文件的提交对话框。

我想要做的是编写这个命令,如果我在它前面放一个数字,它将打开第n级目录的提交对话框。

让事情更清晰的例子:

假设我有这个文件结构project/logs/access.log。 如果我正在编辑access.log

  • 按'cmt' - 我应该得到提交access.log;
  • 的对话框
  • 按'1cmt' - 我应该得到提交logs目录的对话框;
  • 按'2cmt' - 我应该得到提交project目录的对话框;

......等等。

注意:我在Windows 7上使用gvim

希望有人可以帮助我。感谢。

1 个答案:

答案 0 :(得分:1)

我已在以下功能中实现了所需的功能。它需要两个参数:一个开始文件的路径,以及一些要升级的级别。然后它剪切指定数量的拖尾路径组件,并构建运行命令(根据您的示例)。然后它运行命令并在执行后检查shell返回的退出代码。如果发生错误,则会显示错误消息和命令输出。

function! TortoiseCommitDialog(path, count)
    let pat = '[/\\]\@<=\%([^/\\]\+[/\\]\?\)\{' . a:count . '}$'
    let path = substitute(a:path, pat, '', '')
    let cmd = 'TortoiseProc.exe /command:commit ' .
    \   '/path:' . shellescape(path) . ' /closeonend:3'
    let out = system(cmd)
    if v:shell_error
        echoerr 'Failed to run Tortoise commit dialog'
        echo out
    end
endfunction

要在编辑过程中使用此功能,我建议定义一个命令(因为它可以处理与映射不同的参数),如下所示:

command! -count Cmt call TortoiseCommitDialog(expand('%:p'), <count>)

由于-count标记,您可以通过两种方式运行命令::3Cmt:Cmt 3(甚至没有空格::Cmt3)。

相关问题