Diff of UNIX/便利な技/tcshの技


#navi(UNIX/便利な技)

tcsh の技です。
tcsh は csh の拡張です。csh と比べ、コマンドライン編集機能等が改善され、ユーザインタフェースが強化されています。例えば、コマンドラインを十字キーで左に戻ることができるようになったり、さらにカーソルキー上、下を押すと以前実行したコマンドが表示されて実行できるようになったりします。
より詳しくは読みづらいかもしれませんが
[[Manpage of TCSH:http://www.linux.or.jp/JM/html/tcsh/man1/tcsh.1.html]] のページをみるとよいでしょう。

#contentsx

*キー操作 [#g8a6271c]

emacs と共通しているものも多々あると思います。
C というのは Ctrl キーのことです。
また、M というは Meta キー (Esc or Altキー) のことです。
大学の英語キーボードでは Alt キーが ◆ になっていると思います。
また自分でキー操作を設定することも可能です。
設定については [[.cshrc]] を参照してください。
|C-f|カーソルを1文字前方へ移動。→に同じ|
|C-b|カーソルを1文字後方へ移動。←に同じ|
|C-a|カーソルを行頭へ移動|
|C-e|カーソルを行末へ移動|
|C-w|カーソル位置より前方を消去|
|C-k|カーソル位置より後方を消去|
|C-u|すべて消去|
|C-h or C-8|BackSpase|
|C-y|ペースト。マウス中クリックに同等|
|C-c|フォアグラウンドで動いているプログラムを中止(重要)|
|C-z|フォアグラウンドで動いているプログラムを中止。その後 bg と打つとバックグラウンドで、fg と打つとフォアグラウンドで起動する。|
|C-t|カーソル位置の文字と1文字前方の文字を入れ替える|
|C-j or C-m|RETURN|
|C-l|端末の clear|
|C-p|ヒストリを1つ遡る。↑に同じ|
|C-n|ヒストリを1つ進む。↓に同じ|
|C-i|TAB。(tcsh での tab キーは tab 文字ではなく特別な機能を持ちます。)|
|M-?|alias の表示。例えば alias net と、net と入力後 M-? を入力するのは同等の効果|
|M-h|ヘルプの表示。コマンドをタイプしてから入力すると簡単ヘルプが表示される|
|M-<BS>|カーソルの左の文字の削除|
|C-s|出力の停止。例えば ypcat passwd などの長い出力を途中で止めることが可能|
|C-q|C-s からの復帰。むしろこちらが重要|
|C-d|カーソル位置の消去。また cd literacy/ と入力後 C-d を入力すると候補が表示される。また、コマンドも同様に候補が表示される|
|Tab|補完機能。例えば literacy というディレクトリがあるとして、cd lit と入力後 Tab キーを入力すると cd literacy のように補完される。コマンド名に対しても同様|
|←|カーソルを1文字後方へ移動。C-f に同じ|
|→|カーソルを1文字前方へ移動。C-b に同じ|
|↑|ヒストリを1つ遡る。C-p に同じ|
|↓|ヒストリを1つ遡る。C-n に同じ|

*ヒストリ機能 [#va76d8fa]
**!! [#i60ad64d]

一番最近使ったコマンドを意味します。
 % ls
 % !!
 ls
 % which !!
 which ls

**![characters] [#f8f9020d]

コマンドの先頭に [characters] が付く最新のコマンドを意味します。
 % ls -a
 % locate test
 % !l
 locate test
 % !ls
 ls -a

**![num] [#cb51ad5e]

指定したヒストリ番号のコマンドを意味します。
番号は history コマンドで調べます。
 % history
    296  10:47   man -l history
    297  10:47   man -M /usr/man/ja history
    298  10:48   history
 % !296
 man -l history
**^[old]^[new] [#n5a8a6d9]

直前のコマンドの文字列 [old] を [new] で置き換えた文字列を実行します。
 % more aho.txt aho2.txt
 % ^aho^baka
 more baka.txt aho2.txt
変更は1箇所だけです。

全箇所変更したい場合は、下記の :gs/[old]/[new] を使用します。
*ヒストリ修飾子 [#ba950296]
**:[num] [#qc686a07]

[num] 番目の引数を意味します。最初が 0 です。
 % ls -ld ~/public_html
 % cd !!:2
 cd ~/public_html
 % !ls:0
 ls

**$ [#ye0410c0]

最後の引数を意味します。
 % more test.txt
 % ls -ld ~/public_html
 % ls !$
 ls ~/public_html
 % ls !!$
 ls ~/public_html
 % ls !!:$
 ls ~/public_html
 % less !more:$
 less test.txt

**:s/[string1]/[string2] [#j7bc0872]
**:s/[old]/[new] [#j7bc0872]

コマンドの文字列 [string1] を [string2] で置き換えた文字列を意味します。
コマンドの文字列 [old] を [new] で置き換えた文字列を意味します。
 % gcc test.c -lm -o test.o
 % !gcc:s/test/test1
 gcc test1.c -lm -o test.o
これだと、test.c のほうは test1.c になっていますが、
test.o の方が変わっていません。全て変えたいときは
変更は最初の1箇所だけです。

**:gs/[old]/[new] [#l8141cf9]

コマンドの文字列 [old] を [new] で置き換えた文字列を意味します。全箇所変更します。
 % !gcc:gs/test/test1
 gcc test1.c -lm -o test1.o
のように :g 修飾子もつけます。

**: p [#ec1d76a3]

:p 修飾子で実行はせずに確認だけできます。
 % gcc test.c -lm -o test.o
 % !gcc:s/test1/test0/:p
 gcc test0.c -lm -o test0.c ← 実行されない
 % !! ← 実行
また、
 % set autoexpand
と変数 autoexpand を有効化することにより
 % !![tab]
と tab キーを打つことにより展開することができるようになります。

*変数展開修飾子 [#scb08d02]
例えば変数 n が以下のように設定されているとします。
 % set n=/usr/local/bin/sample.c
**:r [#acc69c6e]

拡張子以外の基本部分が展開されます。
 % echo $n:r
 /usr/local/bin/sample

**:h [#a2f467d1]

先頭 (head) 部分が展開されます。
 % echo $n:h
 /usr/local/bin

**:t [#o190af39]

末尾 (tail) 部分が展開されます。
 % echo $n:t
 sample.c

**:e [#bee607a8]

拡張子 (extension ) 部分が展開されます。
 % echo $n:e
 c


#navi(UNIX/便利な技,,footer)
xrea