你如何 override/remove 在 fish shell 中默认完成?
How do you override/remove default completions in fish shell?
我正在为命令的子命令添加补全,但是 fish 保留了基本命令的内置补全,但那些不再适用于子命令。我想在使用子命令时禁用那些基本命令完成。
因此,举一个具体的例子,我为 python3 -m venv
命令添加了 complete
补全。正如我所说,所有内置 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
基本自动完成开关,例如 complete --command python3 --short-option 'V' --description 'Display version and exit'
中的 -V
(我想禁用这些)
我考虑过在 python3 -m venv
模式下使用 -e
标志来删除默认值,但这似乎是错误的方法。我很难过。一旦进入子命令模式,如何禁用所有现有的完成?或者这是否需要对 python3
fish 内置补全的结构方式进行根本性改变?
Fish 从 $fish_complete_path 中的文件加载补全。这是目录列表,如 $PATH。将您的补全放入一个以命令命名的文件中,在较早的目录中带有“.fish”后缀,它将优先。
例如~/.config/fish/completions/python3.fish.
我正在为命令的子命令添加补全,但是 fish 保留了基本命令的内置补全,但那些不再适用于子命令。我想在使用子命令时禁用那些基本命令完成。
因此,举一个具体的例子,我为 python3 -m venv
命令添加了 complete
补全。正如我所说,所有内置 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
基本自动完成开关,例如complete --command python3 --short-option 'V' --description 'Display version and exit'
中的-V
(我想禁用这些)
我考虑过在 python3 -m venv
模式下使用 -e
标志来删除默认值,但这似乎是错误的方法。我很难过。一旦进入子命令模式,如何禁用所有现有的完成?或者这是否需要对 python3
fish 内置补全的结构方式进行根本性改变?
Fish 从 $fish_complete_path 中的文件加载补全。这是目录列表,如 $PATH。将您的补全放入一个以命令命名的文件中,在较早的目录中带有“.fish”后缀,它将优先。
例如~/.config/fish/completions/python3.fish.