他の回答の commandlinefuソリューションを使用しないでください。安全ではなく、非効率的です²。代わりに、をbash
使用している場合は、次の関数を使用してください。それらを永続化するには、それらをに入れます.bashrc
。組み込みで簡単なので、グロブ順を使用していることに注意してください。通常、グロブの順序はほとんどのロケールでアルファベット順です。移動する次または前のディレクトリがない場合は、エラーメッセージが表示されます。特に、ルートディレクトリに移動しようとしたとき、next
またはprev
ルートディレクトリに/
いるときにエラーが表示されます。
## bash and zsh only!
# functions to cd to the next or previous sibling directory, in glob order
prev () {
# default to current directory if no previous
local prevdir="./"
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No previous directory.' >&2
return 1
fi
for x in ../*/; do
if [[ ${x#../} == ${cwd}/ ]]; then
# found cwd
if [[ $prevdir == ./ ]]; then
echo 'No previous directory.' >&2
return 1
fi
cd "$prevdir"
return
fi
if [[ -d $x ]]; then
prevdir=$x
fi
done
# Should never get here.
echo 'Directory not changed.' >&2
return 1
}
next () {
local foundcwd=
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No next directory.' >&2
return 1
fi
for x in ../*/; do
if [[ -n $foundcwd ]]; then
if [[ -d $x ]]; then
cd "$x"
return
fi
elif [[ ${x#../} == ${cwd}/ ]]; then
foundcwd=1
fi
done
echo 'No next directory.' >&2
return 1
}
possibleすべての可能なディレクトリ名を処理するわけではありません。 出力の解析ls
は決して安全ではありません。
² cd
おそらくそれほど効率的である必要はありませんが、6つのプロセスは少し過剰です。
[[ -n $foundcwd ]]
bashとzshのどちらでも問題なく動作します。とても素敵で、これを書いてくれてありがとう。