zsh

WEB+DB PRESSではてなの伊藤さんがzshを紹介していた記事を読んで以来、興味があったものの不勉強でなかなか進んでいなかった。ちなみにzshとはlinuxのシェルの1つ。会社などで使っている場合、通常はbashシェルのはず。zshbashには無いような機能がいろいろ盛り込まれているということで興味ありなわけです。
不勉強で、とは言ったもののちょっとずつ思いついたときにやってるんです。参考にさせてもらっているサイトは漢のzshです。素晴らしいまとまりようです。はてなスター100個送りたいくらい!
ただ、久々に勉強を続けようとすると、あれ、第一回のトピックスはなんやったっけ?と悩んでしまうので、自分用に要点をピックアップしていこうと思います。

第1回 最強のシェル、それは「zsh」

  • zshの設定ファイルは「~/.zshrc」
  • コマンドのオプション項目をTabキーで表示するために、設定ファイルに以下の記述を追記する
autoload -U compinit
compinit

第2回 取りあえず、プロンプトを整えておく。カッコつけたいからね

気に入ったプロンプトの設定は、「名前%」とし、右端に現在のディレクトリが表示されるというもの。設定は以下。

PROMPT="%n%% "
RPROMPT="[%~]"

その他、ユーザーによって色を変えたりする方法が紹介されていた。

第3回 同じことを2度するなんて…… 自分の過去は利用しましょう

  • 複数行に分けて書いたスクリプトも、↑キーを押して過去履歴を表示した際、一度に全行表示される。
  • しかもさらに↑キーを押すとスクリプトの任意の行にカーソルを移動することが出来るので、エディタ感覚で編集&実行が出来る

第4回 コマンド履歴の検索〜EmacsとVi、どっちも設定できるぜzsh

  • シェル上でのコマンド入力に際して、emacsかviのショートカットキーが利用できる。例えば文字削除はemacsの場合、Ctrl-D。一方のviではxになる。自分に慣れ親しんだエディタのショートカットキーがシェル上でも使えるというのが特徴。
  • 以下は便利そうなので覚えること。
ショートカットキー 説明
Ctrl-E 行末へジャンプ
Ctrl-K カーソルから行末までを一気に削除
Ctrl-W カーソルから行頭までを一気に削除
  • 過去に入力したコマンド履歴を検索するには、途中まで入力してCtrl-PもしくはCtrl-N

第5回 「あーっ!」というそのときのために - 備えあれば憂いなしの設定集

  • cdを入力しなくてもディレクトリ移動が可能。設定は以下。これは慣れると非常によさそう。ただもう後戻りはできなくなるな。
 setopt auto_cd
  • 間違ったcd実行でホームディレクトリに移動してしまった場合(意外とよくある)でもcd - タブキーとすれば過去のディレクトリ一覧が表示される。設定は以下。
setopt auto_pushd

第6回 漢はだまって先方予測 - あなたはこの機能使いこなせるか

先方予測機能は正直鬱陶しかったです。俺イラネ。

第7回 ひと味違うzshのリダイレクト

  • bashなどと違って、複数のリダイレクトが可能なのが特徴。以下のようにすれば、hoge.txtの内容をcopy1.txtおよびcopy2.txtにコピーし、かつ標準出力への出力(つまり画面への表示)もできる
% cat hoge.txt > copy1.txt > copy2.txt | cat

第8回 これは既にシェルを超えている…… zshの算術演算

  • 簡単な算術演算は以下のようにする。実数が扱えるのが特徴。
echo $(( (2.1+3.5)/2.2 ))
for i in {1..3}
do
  echo $(( sin($i) ))
done

第9回 世界はモノクロからカラーへ

lsコマンドを実行した時にファイルとディレクトリは色が違って表示されて欲しいところ。デフォルトでは全部ブラック。色を変える設定が紹介されている。

第10回 もってけ泥棒! コピペで始めるzsh

これまでの.zshrcの設定をまとめてある。ここの設定をコピペして自分の.zshrcにコピーすればいきなり、最強設定でzshが楽しめる♪最新版が第22回で紹介されているので、使う時はそっちを使うといい。

第11回 zshはエディタか? - 「zed」でお手軽編集

zshにはzedというエディタ機能もあるらしい。けど、viとかemacs使うから俺イラネ。

第12回 一時ファイルはもういらない - プロセス置換

コマンドをファイルのように扱える機能。うーむマニアック。別にいいや〜。

第13回 タブキーは最強だ - ファイルグロブもサクっと展開

例えば、cp1.txt、cp2.txt、cp10.txtの3つのファイルがあるとして、cp1.txtとcp2.txtだけを削除したい時は、

rm cp?.txt

とすれば消えるんだが、この指定であっているかな?という時に、最後にタブキーを入力すると

rm cp1.txt cp2.txt

に変換される。確認コマンド(echo cp?.txt)と実行コマンドを別に入力しなくて済む!
ただし変換されてしまうので、本当の意味での確認をやりたい場合は、rm cp?.txtと入力した段階で「Ctrl-x g」と入力すると、変換されずにすぐ下に候補一覧が表示される。自信があるときの一応の確認はタブキー、自信がない時の確認にはCtrl-x gを使うとイイ。

第14回 zshとscreenで最強のターミナル環境

screenというモジュールを使うと、ターミナルの管理をこいつが行ってくれるので、ssh接続をしている途中でネットワークが切断されても再接続すれば問題なく作業の続きができるようだ。

第15回 **で簡単ヒット!!! - 漢達への熱いお願い付き

以下のようにすれば、カレントディレクトリ以下の任意の場所にあるcp?.txtというファイルを削除してくれる。もちろん、タブキーやCtrl-x gで確認可能だ。

rm **/cp?.txt

第16回 拡張子ごとにコマンドを自動実行 - 「alias -s」

以下は、txtという拡張子で終わるものをコマンドのように実行した場合、catコマンドを使うというもの。つまり「% hoge.txt」と入力すれば、内容が確認できる。

alias -s txt=cat

第17回 コマンド補完設定 - daemonコマンド編(1)

タブキーによる補完が用意されているコマンドと用意されていないコマンドがある。用意されていない場合、自分で設定ファイルを作成することで補完されるようにすることが出来る、という紹介でした。
第17回から第21回まで、および第23回はコマンド補完の設定。