我的vimrc中有这个快捷方式:
map cmt :!start TortoiseProc.exe /command:commit /path:"%" /closeonend:3 <CR>
这样做的每当我按下'cmt'时,vim将打开我正在用vim编辑的文件的提交对话框。
我想要做的是编写这个命令,如果我在它前面放一个数字,它将打开第n级目录的提交对话框。
让事情更清晰的例子:
假设我有这个文件结构project/logs/access.log
。
如果我正在编辑access.log
和
access.log
; logs
目录的对话框; project
目录的对话框; ......等等。
注意:我在Windows 7上使用gvim
希望有人可以帮助我。感谢。
答案 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
)。