Bash命令行选项卡完成冒号字符

 葉芯彤_613 发布于 2022-12-27 13:28

当参数不包含特殊字符时,我已经成功地为我的自定义命令实现了bash完成,使用compgen机制:

    current=${COMP_WORDS[COMP_CWORD]}
    all=$(_get_all_items)
    COMPREPLY=( $(compgen -W "$all" -- $current) )
    ...
    complete -F _prog_compl prog

我用同样的方式来完成它带一个冒号启动项目::first,:second...,但是它不能告诉我/自动完成它们.我尝试用反斜杠逃避冒号,这也没用.我该怎样逃避冒号完成?

该项目开始于结肠,让我们说::first,:second.如果我写了progname并以这样的冒号开头:

$ progname :

我看到没有完成但是两个冒号("::") - 其中一个自动添加到我输入的行.如果我将冒号转换为普通字符(让我们说'b'),我会完全按照我的要求完成:bfirst,bsecond...

需要注意的是,当我按Tab键时,它会在我之前插入的冒号旁边放置另一个":",它变为"::".

$ bash --version
GNU bash, version 4.1.10(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

另外,我在shell中做了一些实验,产生:

$ compgen -W ":aaaa5 :gb2 :cd3" -- ":"
:aaaa5
:gb2
:cd3

然而它奇怪地将另一个":"添加到我的唯一":"并在我键入命令行后将其设为"::".

$ complete
complete -F _alp_compl alp.sh
complete -o nospace -F __dbus_send dbus-send
complete -F _myprog_compl myprog
complete -o nospace -F __gdbus gdbus
complete -o nospace -F __gsettings gsettings

udslk.. 6

在咨询了help-bash@gnu.org后,我得到了一个答案:

冒号破坏了完成系统的单词(查看COMP_WORDBREAKS shell变量的描述),因此当您键入

预测:[TAB]

完成系统得到一个空字来完成.如果所有可能的完成都具有`:'作为最长公共前缀,则完成系统将冒号插入到该行中.

我的COMP_WORDBREAKS搜索从stackoverflow得到了答案.

从debian bash完成页面修复(我的遗失)/ etc/bash_completion文件后,现在,我的冒号启动完成工作正如我的意愿.

1 个回答
  • 在咨询了help-bash@gnu.org后,我得到了一个答案:

    冒号破坏了完成系统的单词(查看COMP_WORDBREAKS shell变量的描述),因此当您键入

    预测:[TAB]

    完成系统得到一个空字来完成.如果所有可能的完成都具有`:'作为最长公共前缀,则完成系统将冒号插入到该行中.

    我的COMP_WORDBREAKS搜索从stackoverflow得到了答案.

    从debian bash完成页面修复(我的遗失)/ etc/bash_completion文件后,现在,我的冒号启动完成工作正如我的意愿.

    2022-12-27 13:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有