fish - 你如何覆盖/删除鱼壳中的默认完成?
问题描述
我正在为命令的子命令添加补全,但是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
fromcomplete --command python3 --short-option 'V' --description 'Display version and exit'
(我想禁用这些)
我曾考虑-e
在您处于python3 -m venv
模式时使用该标志来删除默认值,但这似乎是错误的做法。我难住了。一旦进入子命令模式,如何禁用所有现有的完成?python3
或者这是否需要对鱼内置完成的结构方式进行根本性的改变?
解决方案
Fish 从 $fish_complete_path 中的文件加载完成。这是一个目录列表,例如 $PATH。将您的完成放入以命令命名的文件中,在较早的目录中带有“.fish”后缀,它将优先。
例如~/.config/fish/completions/python3.fish。
推荐阅读
- kotlin - 带有 Java 超类的 Kotlin 数据类
- c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd
- excel - excel SQL VBA更新2个访问表
- google-chrome - 从 Firebase 提供时,带有范围请求路由器的 Workbox 预缓存音频无法在 Chrome 中播放
- pyspark - 如何在 PySpark 中的两个日期之间生成每小时时间戳?
- javascript - Ajax POST 仅在页面刷新时执行 php 脚本
- c - 在 C 中打印 3d 数组中的 2d 部分(分段错误)
- plot - GNUplot - 使用窗口坐标系画线
- vb.net - 使用 VB.Net 在 MS Project 中生成资源使用时间阶段性数据
- java - 在 log4j2 中创建 Logger 包装器类时出错