在某些情况下,如何调整 zsh 的完成系统以完成“假”文件?
更准确地说,AVFS文件系统通过在每个存档旁边创建一个“假目录”来将存档公开为目录。默认情况下,它复制其挂载点下的整个目录层次结构~/.avfs。此外,在 下~/.avfs,对于每个存档文件(例如 )/tmp/foo.zip,除了存档文件本身之外~/.avfs/tmp/foo.zip,还有一个称为~/.avfs/tmp/foo.zip#公开存档内容的目录。然而,这个额外的目录没有出现在 : 的列表中~/.avfs/tmp,它只在明确请求时才存在。(这类似于某些自动挂载器的操作方式。)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Run Code Online (Sandbox Code Playgroud)
当我键入类似上面的命令时,foo.zip#在 下不会显示为完成~/.avfs/tmp/,因为没有这样的目录。我怎么能告诉 zsh 每当有一个文件的完整路径$arc匹配~/.avfs/**/*.(tgz|zip)¹ 时,它应该假装有一个名为 的目录${arc}#?
(请注意,我希望完成每次调用_filesor 时都可以使用_dirs,而不仅仅是cd命令。_files如果可能,我宁愿不必复制函数的代码。)
¹和所有其余的扩展
有没有办法让 bash 确切地知道当你双击时要显示什么?例如,我有一个scpy需要几个参数的 python 脚本。例如apt-get,如果你双标签给你
autoclean build-dep clean dselect-upgrade 清除源升级 自动删除检查 dist-upgrade 安装删除更新
有没有办法为您自己的脚本/程序做到这一点?我需要将我的 python 脚本包装在 bash 脚本中吗?
是否可以以这样的方式配置 bash,即在第一个选项卡上自动完成它列出所有可能的文件,并在随后的选项中循环?
这两个选项都很容易单独完成,我可以将它们绑定到不同的键,但以上将是完美的,但我在网上找不到任何关于它的信息。
在最近的更新 (Ubuntu 12.04 LTS) 之后,命令行上的 TAB 完成速度很慢。在输入部分命令(例如evi [TAB])或部分文件名(例如evince somedocu[TAB])后,shell 有时虽然并非总是如此,但会挂起几秒钟。
就个人而言,我更喜欢功能较弱的自动完成功能而不是缓慢的自动完成功能。有简单的修复吗?
编辑:与评论相关的其他信息:
PATH 是非常标准的。~/bin 有一些 bash 脚本
$ echo $PATH
/home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)工作目录中的文件数小于 100。
vim 的一个相当烦人的功能是,如果您处于插入模式并执行自动完成(Ctrl-N),向下箭头键到所需的项目,然后按 Enter 键,然后它会插入该项目,但也会插入一个换行符然后必须删除。
有没有办法从自动完成列表中选择一个项目而不需要额外的不需要的换行符?
我在 Debian Jessie 8.6 上。我注意到apt-get在按 Tab 包和命令时获得预期的 bash 自动完成,但是当尝试使用它时apt不起作用。我记得在它工作的地方使用 xubuntu 16.04,所以我觉得它在这里不起作用很奇怪。有没有办法为命令启用它apt?如果是这样,如何?
我注意到在 Ubuntu 上,如果我输入以下内容:
mc
Run Code Online (Sandbox Code Playgroud)
它没有安装,我收到以下消息:
The program 'mc' is currently not installed. You can install it by typing: sudo apt-get install mc
Run Code Online (Sandbox Code Playgroud)
但是在 Debian 中,这是不可用的。它只是给出了“-bash:/usr/bin/mc:没有这样的文件或目录”消息。如何在 Debian 的 bash 命令行中实现相同的功能?是的,我知道如果我想要包建议,我可以简单地使用apt-cache search进行正则表达式搜索。但是,我希望在输入程序名称时立即得到更简单的建议。
根据讨论,该功能由包command-not-found 提供。但是,即使在安装它并安装 bash-completion 包之后,这在 Debian bash shell 上也不可用。
我正在尝试为我编写的一些自定义函数编写完成函数,但即使是最基本的函数似乎也很挣扎。
一个示例函数是:
function eb_instances() {
if [ "$#" -ne 2 ]; then
echo "Usage eb_instances <aws profile name> <environment name>"
echo "e.g.:"
echo " eb_instances production kraken-prod-api"
return 1
fi
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=$2" --profile=$1 --output=json | jq -r ".Reservations[].Instances[].PrivateIpAddress"
}
Run Code Online (Sandbox Code Playgroud)
这有两个位置参数,<aws profile name>和<environment name>
我希望 的完成选项<aws profile name>通过运行动态可用
sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' ',并<environment name>通过运行我调用的另一个函数动态可用的完成选项eb_names。
我发现文档非常稀疏且难以理解。我也看到了类似命令的 zsh-completions 存储库,但似乎找不到与我需要的类似的东西。
任何帮助入门将不胜感激!
更新
我使用 ubuntu 11.04。
在完成 cd、ls 等选项卡列表后,有没有办法为输出设置颜色?
IE
myshell@root$ cd ~/user/files/ 我点击了标签...
myfile myfoo mybar <-- 这个输出是彩色的?
我希望你喜欢我的图表。