はじめに
こんにちは。訳あってcsh(tcsh)を使っている者です。
ディレクトリ名を全部入力するのメンドくない?
たとえば
foobar/
fugahoge/
mogemuga/
とディレクトリがある場合
cd foo <RETURN>
と入力したら移動したい先はfoobar/
なのは明らか。
もちろんタブ等で補完すればいいのですが、それすらメンドい…
そんな時はスクリプトで解決しましょう。
~/scripts/nocd5_cd.csh
# !/bin/csh
if ($1 == "") then
pushd ~
else
set pattern = `basename $1`
set parent = `dirname $1`
set directories = `find "${parent}" -maxdepth 1 -name "${pattern}*" ! -name ".." -type d`
if (${#directories} == 0) then
pushd $1
else if (${#directories} == 1) then
pushd ${directories}
else
foreach i (`seq 1 ${#directories}`)
echo $i : ${directories[$i]}
# 番号に色を付けたい場合
# echo "\e[01;34m"$i "\e[01;30m":"\e[0;1m" ${directories[$i]}
end
set selection = $<
pushd $directories[$selection]
endif
endif
~/.cshrc
alias cd source ~/scripts/nocd_cd.csh
pushd使わない主義者の方はpushd
のところをchdir
にしてください。cd
にしてしまうと再帰呼び出しになるので注意。
使い方
前述の例の場合、
cd foo <RETURN>
とすればfoobar/
に
cd fuga <RETURN>
とすればfugahoge/
に
cd m <RETURN>
とすればmogemuga/
に
移動します。
また
cd f <RETURN>
と入力した場合foobar/
とfugahoge/
の2つの候補が存在します。
候補が複数ある場合は、候補一覧を番号と共に表示し、キーボード入力待ちの状態になります。
移動したいディレクトリの番号を入力すると、そのディレクトリ移動できます。
おわりに
候補が複数ある場合の挙動はpercol
やpeco
を使うともっと便利になるかも。
ではHave a good csh/tcsh life