私のMacでは、bash(バージョン3.2.53(1))はコマンドライン引数にファイルオートコンプリートを使用します。ただ現在のディレクトリにあります。
作業中のLinuxシステムでは、bash(バージョン4.1.2(1))は現在のディレクトリのファイルを使用してコマンドライン引数を自動補完します。そして親ディレクトリ。
たとえば、ディレクトリツリーは次のようになります。
/home/pjl/
bin/
foo/
book/
私のMacでは、次のことを行います。
$ cd foo
$ cd b<TAB>
$ cd book
バッシュオートコンプリートただ到着するbook
。ただし、Linuxシステムで同じことを行うと、次のようになります。
$ cd foo
$ cd b<TAB>
bin book
$ cd b
bashには2つのオプションがあります:book
現在のディレクトリからそして bin
親ディレクトリから。
Bash オートコンプリートの作成方法ただ現在のディレクトリを使用しますか?
存在する両方マシンはCDPATH
次のように設定しました。
.:..:../..:../../..:../../../..:../../../../..:/home/pjl/src:/home/pjl
CDPATH
Linuxシステムで設定を解除すると、bashは次のように自動的に実行します。ただ現在のディレクトリ(私が望むもの); LinuxではbashがCDPATH
。
CDPATH
しかし、どのように設定を維持できますか(so'ingはcd
以前のように動作します)。いいえCDPATH
オートコンプリートにbashを使用しますか?
別の許容される動作はオートコンプリートです。好意現在のディレクトリと使用法CDPATH
そして、もし現在、ディレクトリに一致するものはありません。
答え1
~/.bashrc
正しい方法は、上記で提案した@Gillesのように、以下を使用することです(ここではより短いバージョン)。
_my_cd () { CDPATH= _cd "$@";}
CDPATH
より良いアプローチは、ローカルで一致するものがないことを確認することです。
_my_cd () { CDPATH= _cd "$@"; if [ -z "$COMPREPLY" ]; then _cd "$@"; fi;}
これにより、手間をかけずにプログラムで実行できる機能を実現できます。忘れないで
complete -F _my_cd cd
/usr/share/bash-completion/bash_completion
何らかの理由で-o nospace
(デフォルトのように見えますが)、次のこともできますcd
。nospace
complete -F _my_cd -o nospace cd
答え2
あなたは犯人ですbash_complete、あなたのbashバージョンはまったくありません。
そしてbash_completion リポジトリのヘッドバージョン, cd
include 以下のディレクトリを自動的に完成しますCDPATH
。
ローカルを直接変更できますが、オートコンプリート機能を直接作成する方がbash_completion
良いでしょうcd
。
グローバル効果が必要な場合は、/etc/bash_completion.d/cd
次の内容でファイルを作成します。
_cd()
{
local cur=${COMP_WORDS[COMP_CWORD]}
_init_completion || return
local IFS=$'\n' i
compopt -o filenames
local -r mark_dirs=$(_rl_enabled mark-directories && echo y)
local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y)
_filedir -d
if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
i=${COMPREPLY[0]}
if [[ "$i" == "$cur" && $i != "*/" ]]; then
COMPREPLY[0]="${i}/"
fi
fi
return 0
}
if shopt -q cdable_vars; then
complete -v -F _cd -o nospace cd
else
complete -F _cd -o nospace cd
fi
このバージョンは、一部のコンテンツを除いて完全に元のバージョンからのものですCDPATH
。
設定にのみ使用するには、次のように.bashrc
編集できます。
_my_cd () {
declare CDPATH=
_cd "$@"
}
complete -F _my_cd cd
CDPATH
bash_completion
システムが古すぎるか、まだロードされていないため、Mac OSXでbashコンプリートが機能しないことがあります。
BASH_COMPLETION_COMPAT_DIR
変数を使用して、カスタム補完機能がロードされる場所を設定できます。bash_completion
デフォルト値はです/etc/bash_completion.d
。