我正在为命令的子命令添加补全,但是fish保留了基本命令的内置补全,但是不再适用于子命令。我想在使用子命令时禁用这些基本命令完成。
因此,举一个具体的例子,我为complete
命令添加了python3 -m venv
完成。如我所述,所有内置python3
补全仍然显示,即使它们不再适用。因此,当我输入python3 -m venv -<TAB>
时,我得到的是我添加的补全(好!),还包括所有默认补全(不好的)。
所以我有这段代码:
function __fish_python_using_command
# make sure that the command (minus the first item) matches argv
set cmd (commandline -opc)
if [ (count $cmd) -le (count $argv) ]
return 1
end
set idx (math (count $argv)+1)
if [ "$argv" = "$cmd[2..$idx]" ]
return 0
end
return 1
end
complete -f -c python3 -n '__fish_python_using_command -m venv' -s h -l help -d 'Display help creating virtual Python environments'
运行此命令后,当我键入python3 -m venv -<TAB>
时输入:
--help
定义的新的自动完成功能(正确)-h
的基本定义自动完成(错误)python3
个基本自动完成开关,例如-V
中的complete --command python3 --short-option 'V' --description 'Display version and exit'
(我要禁用这些开关)我已经考虑过使用-e
标志在python3 -m venv
模式下删除默认值,但这似乎是错误的处理方式。我很沮丧进入子命令模式后,如何禁用所有现有补全?还是需要对python3
鱼内置补全的结构方式进行根本性的改变?
答案 0 :(得分:2)
Fish从$ fish_complete_path中的文件加载补全。这是目录列表,例如$ PATH。将您的完成内容放入命令后命名的文件中,该文件的后缀为“ .fish”,该文件优先。
例如〜/ .config / fish / completions / python3.fish。