* tcsh教 [#q70f4e28]
- tcshが如何にすごいのかの布教活動です。
- ここに書いてあることはtcshのマニュアルに出ていることばかりです。
#contents
** 超強力!ヒストリー補完 [#sf22b33a]
- history-search-backward と history-search-forward でヒストリー補完が行えます。
bindkey -k up history-search-backward
bindkey -k down history-search-forward
~ これでヒストリー補完をしてみましょう。現在以下のようなコマンドヒストリーの状態です。
107 2:58 ls
108 2:58 mkdir test
109 2:58 cd test
110 2:58 vi hoge.c
111 2:58 cc -Wall -g hoge.c
112 2:58 vi hoge.c
113 2:58 vi hoge.h
114 2:58 vi Makefile
115 2:58 make
116 2:58 h
~ この状態で "v" だけ打ってから上キーでヒストリーをたどってみるとヒストリー中の "v" から始まるコマンドのみで絞り込まれます。
v[up]
vi Makefile
vi hoge.h
vi hoge.c
~ もちろん "vi h"まで打った状態でヒストリーをたどるとさらに絞り込まれます。
vi h[up]
vi hoge.h
vi hoge.c
~ これだけでもtcshを使う価値は十分すぎる程にあると言えるでしょう。tcsh使いたくなってきたでしょう。ニヤニヤ。早速.cshrcに history-search-backward と history-search-forward のbindkeyを書き足しておきましょう。
** 頭のいい補完 [#k007a3ef]
- シェル変数 complete を enhance に設定することで頭のいい補完が行えるようになります。
set complete = enhance
~ マニュアルによれば以下のように説明されています。
1) 大文字小文字の区別を無視し、 2) ピリオド、ハイフン、
アンダスコア (`.', `-', `_')を、単語を分ける記号である
とみなし、ハイフンとアンダスコアは同等なものとみなします。
~ 次のようなファイルが有る場合、b.t[^D] では "bind.txt" に補完され、re[^D] では "README" に補完されます。
README dhcpd.txt postgres.txt user.txt
apache.txt pgsql_perl5.txt qmail.txt vpopmail.txt
bind.txt php.txt qmailadmin.txt webalizer.txt
** tcshってTABを2回押しても補完リストでないよね [#of5511c6]
- デフォルトでは補完リストの表示は[Control+D]でできます。
tsutomu@diana:~> per[^D]
periodic perl perl5 perl5.00503 perlbug perlcc perldoc
tsutomu@diana:~> per
** コマンドの終了状態を知りたい [#id6396ce]
- バックグラウンドで実行したプロセスが終了した時には終了コードが表示されるけどフォアグラウンドで終了したプロセスの終了状態も見たい。
set printexitvalue
~ これで0以外の終了コードでプロセスが終了するといちいち報告してくれます。
tsutomu@diana:~> cat /noexist
cat: /noexist: No such file or directory
1で終了したよっ
** まちがってcdしてしまった [#h60e1024]
- cdに引数を与えようとしたのに手が滑って"cd"と打ってしまい、ホームディレクトリに戻ってしまった時。
cd $owd
~ で戻れます。bashなら $OLDPWD にcdすれば戻れます。bashの事なんてどうでもいいんですが。
** 高速ls "ls-F" [#i96134e7]
- ls を "ls -F" のエイリアスにしているのなら "ls-F" がそのまま代用できます。表示の差異もそんなに違和感は無く、マニュアル曰く、高速らしいです。ls用の別の引数を渡した場合は素直に ls を呼び出すらしいです。僕は使ってません。
alias ls ls-F