Bashの場合は、~/.bashrc
に以下を追加できます。デフォルトでは、大文字と小文字を区別しないマッチングが行われます。少し長めですが、シンボリックリンクのディレクトリからcd ../my_direc
をオートコンプリートしようとした場合を除き(hereを参照してください)
このスクリプトを使用して大文字と小文字を区別しないでください。 insensitve、あなたにもまた、そのためTAB-完成はまた、大文字と小文字を区別しないで、あなたの~/.bashrc
にbind 'set completion-ignore-case on'
が追加される場合があります。
cd() {
# Attempts to autocomplete the directory name
#
# If it fails to find a match, it'll still execute the input, in case the argument was
# something like "-".
case_insens=1 # set to one if you want it to try case-insensitive matching
# for exact matches, cd immediately
if [ -d "$1" ]; then
builtin cd "$1"
return
fi
# deal with no arguments passed
if [ $# -eq 0 ]; then
builtin cd
return
fi
# first loop for case-sensitive (since we prefer a case-sensitive match)
# for more on this globbing, see: bit.ly/1CZ9qym
for element in "$(dirname "$1")"/{*,.[!.]*,..?*}; do
# skip if this result is not a directory
[ -d "$element" ] || continue
if [[ "$(basename "$element")" == "$(basename "$1")"* ]]; then
# if there's no ambiguity, switch to that folder
if [ $(find -L "$(dirname "$1")" -maxdepth 1 -name "$(basename "$1")*" -type d 2>/dev/null | wc -l) -gt 1 ]; then
echo "'$1' matches multiple results: "
echo "$(find -L "$(dirname "$1")" -maxdepth 1 -name "$(basename "$1")*" -type d 2>/dev/null)"
# try to cd anyway
builtin cd "$1" &> /dev/null
unset case_insens element
return
else
builtin cd "$element"
unset case_insens element
return
fi
fi
done
if [ $case_insens -eq 1 ]; then
#case-insensitive argument
ci_arg="${1,,}"
else
builtin cd "$1"
unset case_insens element
return
fi
#Case-insensitive loop
for element in "$(dirname "$1")"/{*,.[!.]*,..?*}; do
# skip if this result is not a directory
[ -d "$element" ] || continue
ci_element_name="$(basename "${element,,}")"
if [[ "$ci_element_name" == "$(basename "$ci_arg")"* ]]; then
# if there's no ambiguity, switch to that folder
if [ $(find -L "$(dirname "$element")" -maxdepth 1 -iname "${ci_element_name}*" -type d 2>/dev/null | wc -l) -gt 1 ]; then
echo "'$ci_arg' matches multiple results: "
echo "$(find -L "$(dirname "$element")" -maxdepth 1 -iname "${ci_element_name}*" -type d 2>/dev/null)"
# try to cd anyway
builtin cd "$1" &> /dev/null
unset ci_arg case_insens ci_element element
return
else
builtin cd "$element"
unset ci_arg case_insens ci_element element
return
fi
fi
done
# we still haven't found a match, so pass the (faulty) argument to the cd command
builtin cd "$1"
unset ci_arg case_insens ci_element element
}
それは多くの予期しない結果をもたらすだろうと同様に使用例
cd ~
cd deskt
思えます。義和TABを打つと間違っているのですか? Kornはタブの完成をサポートしていませんか? – Cfreak
「アプリコット」ディレクトリもあれば、何をしたいですか? –
@Cfreak良い質問;それは本当に小さな便利なものです。私は間違いなく行うことができますが、ディレクトリをオートコンプリートして入力するたびに、ESC ESCやその他のキーを押す必要があるのは遅いです。基本的には、手動でオートコンプリートして、手動でCDに書き込もうとした場合と同じように機能します。私はこれがその価値よりも重要かどうかを理解しています。 :P – carlinyuen