当我输入“svn add path/to/somefile...”并按 Tab 键自动完成时,系统应该仅有的完整的文件/目录不是目前在 SVN 控制下。同样,当我提交、删除或解析文件时,制表符补全应该只补全与我正在做的事情相关的文件(即已修改、当前在 SVN 中或有冲突的文件)。这在 SVN 中尤其重要,因为您输入的每个文件名都可能受益于智能自动补全,但它也适用于其他程序。
我知道 bash 有一个 bash_completion 文件,可用于以编程方式改变这种行为,但我还没有找到一个像样的 SVN 完成示例,它实际上完成的是文件名而不是 SVN 命令名。
我的问题是:有人有这样的设置吗?有人使用其他 shell 或工具来执行类似操作吗?有人考虑过这个问题吗?
答案1
看一下找到的完成脚本这里.它可能接近于做你想做的事。
一段摘录看起来很有希望:
# 'files' is set according to the current subcommand
case $cmd in
st*) # status completion must include all files
files=$cur*
;;
ci|commit|revert|di*) # anything edited
files=$($status $cs| _svn_grcut '@([MADR!]*| M*|_M*)')
;;
add) # unknown files
files=$($status $cs| _svn_grcut '\?*')
;;