LoginSignup
3
3

More than 5 years have passed since last update.

csh/tcshのcdコマンドをちょっぴり便利に

Posted at

はじめに

こんにちは。訳あって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つの候補が存在します。
候補が複数ある場合は、候補一覧を番号と共に表示し、キーボード入力待ちの状態になります。
移動したいディレクトリの番号を入力すると、そのディレクトリ移動できます。

おわりに

候補が複数ある場合の挙動はpercolpecoを使うともっと便利になるかも。
ではHave a good csh/tcsh life

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3