如何將 bash 檔名補全重設為「更多」?

如何將 bash 檔名補全重設為「更多」?

我做了一些改變 TAB 自動完成工作方式的事情,但僅限於 more 指令。

其他每個指令都會列出可能的補全,但現在更多指令會列出一對單引號內的所有可能性。

所以在 /etc 中,如果我輸入

more pass<TAB>

結果是

$ more 'passwdqc.conf
passwd
passwd-' 

打字

less pass<TAB>

結果是

$ less passwd
passwd         passwd-        passwdqc.conf  

我怎麼重置它,以便more自動完成的行為更像less

編輯:

$ shopt -u
autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
compat31        off
compat32        off
compat40        off
compat41        off
direxpand       off
dirspell        off
dotglob         off
execfail        off
extdebug        off
failglob        off
globstar        off
gnu_errfmt      off
histreedit      off
histverify      off
hostcomplete    off
huponexit       off
lastpipe        off
lithist         off
login_shell     off
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
restricted_shell    off
shift_verbose   off
xpg_echo        off
$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

答案1

我可以重現:

_comp_foo() { compopt -o filenames -o nospace; COMPREPLY=("$(compgen -f -- "$2")"); }
complete -F _comp_foo foo
cd /etc

類型foo passTab。你應該看到這樣的東西:

foo 'passwd
passwd-'

:)

如何重置它,以便 more 的自動完成行為更像 less?

您可以重置 bashNAME完成complete -r NAME

help complete說:

-r - 刪除每個名稱的完成規範,或者,如果未提供名稱,則刪除所有完成規範

您可以重複使用現有的完成:

_completion_loader less 2>/dev/null # for bash-completion >= 1.9, bash >= 4.1
eval $(complete -p less | sed 's/ less$/ more/')

也可以看看:如何透過最近的 bash-completion 重複使用現有的完成

相關內容