確認環境
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シェルについての情報は、以下のサイトさんが詳しそう。
ちょっと古いけどしっかりまとめられてて、とてもありがたい。
参考
以上。