確認環境
| PC | Thinkpad X1 Carbon 2nd Gen |
| OS | FreeBSD 12.0-RELEASE-p7 |
| tcsh | tcsh 6.20.00 |
はじめに
FreeBSD標準シェルのtcsh。
標準エラーのリダイレクトの扱いはちょっと困るけど、
デフォルトでもそこそこ補完してくれて、使い勝手はそんなに悪くないと思う。
ただ、~/.cshrcに少し設定を追加すれば、少し幸せになれるかもしれない。
ここでは、僕がちょっとハマったことや、ちょっと便利なショートカットキーの指定方法をご紹介。
- 設定ファイルと実行順序
- ログイン時
- 通常シェル起動時
- ログアウト時
~/.cshrcの設定例- パス
- エイリアスの引数
- ショートカットキー
設定ファイルと実行順序
まずは、把握しておきたい設定スクリプトの種類と実行順序について。
ログイン時
| 順番 | ファイル | 備考 |
|---|---|---|
| 1 | /etc/csh.cshrc |
|
| 2 | /etc/csh.login |
ログイン時のみ実行 |
| 3 | ~/.tcshrc |
tcshでのみ使用 |
| 4 | ~/.cshrc |
~/.tcshrcがあると実行しない |
| 5 | ~/.history |
savehistが設定されている場合、コマンド履歴をメモリにロードするっぽい |
| 6 | ~/.login |
ログイン時のみ実行 |
| 7 | ~/.cshdirs |
savedirsが設定されている場合、ディレクトリスタックを読み込むためのファイルっぽいけど、イマイチ利用価値が分からない |
通常シェル起動時
| 順番 | ファイル | 備考 |
|---|---|---|
| 1 | /etc/csh.cshrc |
|
| 2 | ~/.tcshrc |
|
| 3 | ~/.cshrc |
~/.tcshrcがあると実行しない |
| 4 | ~/.cshdirs |
tcsh -dをつけたときのみ |
ログアウト時
| 順番 | ファイル | 備考 |
|---|---|---|
| 1 | /etc/csh.logout |
|
| 2 | ~.logout |
中身はclearとか書いておくといいと思う |
なお、FreeBSDのcshはtcshへのハードリンクっぽい。
~/.cshrcの設定
特に理由がなければ、設定は~/.tcshrcではなく~/.cshrcに書けばいいと思う。
FreeBSDでサンプル(/usr/share/skel配下)が用意されているのも~/.cshrcっぽいので。
パス
実行ファイルを探すディレクトリを指定する環境変数のPATH。
~/.cshrc内でpath変数に設定すると、PATHにも反映してくれる。
サンプルに従って空白区切りでディレクトリを追記すればOK。
set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin $HOME/.cargo/bin $GOPATH/bin)
以下のように設定しちゃうと、~/.cshrcを読み込む度に$HOME/binが末尾に追加されていってしまうので注意。
set path = ($path $HOME/bin)
エイリアスの引数
コマンドの別名を手軽に設定できるエイリアス機能。
エイリアス定義時に、引数を明記しない場合は末尾に展開される。
でも、途中に引数を渡したいときもある。
そんなときは、'\!*'や、'\!:1'などで指定できる。
シングルクォーテーションで囲む点に注意。
# e hello world ==> echo hello world alias e echo # w grep sed | file -f - ==> which grep | file -f - alias w 'which \!:1 | file -f -' # wa grep sed | file -f - ==> which grep sed | file -f - alias wa 'which \!* | file -f -'
ちなみに、コマンド名の前に\を入れると、そのときだけエイリアスを無効化できるよ。
> \ls
ショートカットキー
他のシェル同様、ショートカットキーを設定できる。
以下が設定例。
サンプルに追記する感じでよろしいかと。
(up/downはサンプルから変えてるよ)
if ( $?tcsh ) then bindkey -s "^[u" "^Ucd ..\n" # 上のディレクトリへ移動 bindkey -s "^[z" "^Ucd -\n" # 直前のディレクトリへ移動 bindkey -s "^[g" "^E | grep " # 入力コマンドの末尾に" | grep " を追加 bindkey -s "^[m" "^Aman ^E\n" # 入力コマンドのmanを開く bindkey -k up up-history # 全履歴を古い方に向かって辿っていく(新⇒古) bindkey -k down down-history # コマンド履歴を辿っていく(古⇒新) bindkey "^P" history-search-backward # 入力文字列から始まるコマンド履歴を辿っていく(新⇒古) bindkey "^N" history-search-forward # 入力文字列から始まるコマンド履歴を辿っていく(古⇒新) endif
キーの表現例は以下。
| 表記 | 意味 |
|---|---|
^[u |
Alt+uキーかEsc uを指す |
^p |
Ctrl+Pキーを指す。大文字・小文字の区別は無さ気 |
bindkeyのオプションは以下。 他はbindkey -uで確認してね。
| オプション | 意味 |
|---|---|
-k |
矢印キーを指定する際に必要っぽい |
-r |
ショートカットキー削除 |
-s |
文字列を出力する際に必要っぽい |
-v |
シェルがviライクのキーバインドに!! |
ちなみに現在設定されているショートカットキーも、bindkeyで確認できる。
> bindkey ^@ "^@" -> set-mark-command > bindkey Standard key bindings "^@" -> set-mark-command "^A" -> beginning-of-line "^B" -> backward-char "^C" -> tty-sigintr . . .
最後に
僕は使っていないのだけれども、tcshの補完機能はカスタマイズできるっぽい。
物足りない人は下記ページなどを参考に、completeコマンドについて調べてみるといいかも。
また、Cシェルについての情報は、以下のサイトさんが詳しそう。
ちょっと古いけどしっかりまとめられてて、とてもありがたい。
参考
以上。