我做了一些改变 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 pass
,Tab。你应该看到这样的东西:
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/')