我曾经能够输入以下内容:
$> ./foo --arg =< TAB>
foo是我写的任何程序,它会给我一个当前目录中的文件列表,就像tab-completion通常一样。我没有必要对/ etc / bash_completion进行任何更改。
然而,最近,由于一些未知的原因,这已经消失了。有谁知道如何重新启用此功能?
FWIW,这仍然是正确的事情(注意缺少等号):
$> ./foo --arg< TAB>
答案 0 :(得分:8)
我删除了所有bash完成脚本并开始逐个添加它们,如果它们中的任何一个导致问题。
在我的情况下,结果是npm完成脚本是导致此问题的原因。
不确定(还)问题是什么,但这是完成脚本导致等号值不像以前那样工作:
###-begin-npm-completion-###
#
# npm command completion script
#
# Installation: npm completion >> ~/.bashrc (or ~/.zshrc)
# Or, maybe: npm completion > /usr/local/etc/bash_completion.d/npm
#
COMP_WORDBREAKS=${COMP_WORDBREAKS/=/}
COMP_WORDBREAKS=${COMP_WORDBREAKS/@/}
export COMP_WORDBREAKS
if type complete &>/dev/null; then
_npm_completion () {
local si="$IFS"
IFS=$'\n' COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \
COMP_LINE="$COMP_LINE" \
COMP_POINT="$COMP_POINT" \
npm completion -- "${COMP_WORDS[@]}" \
2>/dev/null)) || return $?
IFS="$si"
}
complete -F _npm_completion npm
elif type compdef &>/dev/null; then
_npm_completion() {
si=$IFS
compadd -- $(COMP_CWORD=$((CURRENT-1)) \
COMP_LINE=$BUFFER \
COMP_POINT=0 \
npm completion -- "${words[@]}" \
2>/dev/null)
IFS=$si
}
compdef _npm_completion npm
elif type compctl &>/dev/null; then
_npm_completion () {
local cword line point words si
read -Ac words
read -cn cword
let cword-=1
read -l line
read -ln point
si="$IFS"
IFS=$'\n' reply=($(COMP_CWORD="$cword" \
COMP_LINE="$line" \
COMP_POINT="$point" \
npm completion -- "${words[@]}" \
2>/dev/null)) || return $?
IFS="$si"
}
compctl -K _npm_completion npm
fi
###-end-npm-completion-###
答案 1 :(得分:1)
不确定您所处的环境,但最近的CentOS
complete -D -o default
在令牌没有空格作为默认值后启用文件名完成。要在另一个方向切换它:
complete -D -o nospace
但是,看起来内置版本的旧版本没有-D选项。
答案 2 :(得分:1)
我使用https://github.com/ai/rake-completion解决了Ubuntu 12.04的同样问题。 你需要
wget -O ~/scripts/rake https://raw.githubusercontent.com/ai/rake-completion/master/rake
. ~/scripts/rake
或者您可以在该页面上使用其他方式之一。