【发布时间】:2021-06-03 02:57:23
【问题描述】:
我无法让鱼壳中的“完整”功能按我的意愿运行,我已经寻找答案好几天了。
总结
基本上我需要提供选项卡目录自动完成功能,就好像我在与我当前所在的目录不同的目录中一样。它的行为应该与“cd”和“ls”完全一样,但起点在另一个目录。能够做到这一点似乎是一件微不足道的事情,但我找不到让它发挥作用的方法。
说明
下面的示例文件夹结构
- root
- foo
- a
- dir1
- subdir1
- dir2
- subdir2
- b
- dir3
- subdir3
- dir4
- subdir4
我在“根”目录中运行这些脚本,但我需要选项卡自动完成才能表现得就像我在“foo”目录中一样。
testfunc -d a/dir2/subdir2
代替
testfunc -d foo/a/dir2/subdir2
'foo' 内有很多目录以及其中的很多子目录,这种自动完成行为对于加快我们的进程是必要的(这个脚本在一天中被广泛使用)。
尝试的解决方案
我已经尝试使用 'complete' 内置函数通过指定要使用的目录来完成这项工作,但所有这一切都是在参数后使用空格自动完成第一级目录,而不是继续自动- 像 'cd' 一样完整。
complete -x -c testfunc -a "(__fish_complete_directories ./foo/)"
工作 bash 版本
我已经在 Bash 中完成了这项工作,我正在尝试将其移植到钓鱼中。 Bash 版本见下文。
_testfunc()
{
local cur prev words cword
_init_completion || return
compopt +o default
case $prev in
testfunc)
COMPREPLY=( $( compgen -W '-d' -- "$cur" ) )
compopt +o nospace
return
;;
-d)
curdir=$(pwd)
cd foo/ 2>/dev/null && _filedir -d
COMPREPLY=( $( compgen -d -S / -- "$cur" ) )
cd $curdir
return
;;
esac
} &&
complete -o nospace -F _testfunc testfunc
这本质上是进入我想要的文件夹,执行自动完成,然后返回运行脚本的原始文件夹。我希望在 Fish 中让它在 Bash 中工作之后会更容易(我需要支撑这两个壳),但我只是把头发拉出来。
任何帮助将不胜感激!
【问题讨论】:
-
您能否扩展一下“所有这一切都是在参数后用空格自动完成第一级目录,而不是像 'cd' 那样继续自动完成”?问题具体是空间吗?
-
您好,感谢您的回复。问题是我正在尝试自动完成至少三个目录长的路径。所以我试图解释的是,我可以使用第一个目录自动完成它,但它只是作为参数进入该目录,后面有一个空格。我实际上希望它使用正斜杠自动完成,然后继续查找嵌套目录并自动完成它们。我所追求的行为是让我的终端相信我在尝试完成制表符时比实际更深一个文件夹。
标签: autocomplete fish