tcshからzshへ移行

UbuntuからDebianに乗り換えて, 最初は今まで通りtcshを使ってたけど, 日本語の入力が出来ないことに気付いた.
おそらく調べればできるようになるんだろうけど, 面倒臭い.
ためしにやってみたbashzshでは問題なく日本語入力が出来たので, 同じ面倒臭さならば丁度良いと思い乗り換えることにした.
(前から乗り換えよう乗り換えようと思ってたし.)



やるからには, 最低でも今のtcshと同じぐらいの機能は欲しい.

プロンプトの設定

私は, tcshだと以下のように設定している.

if ($?tcsh) then
  set prompt='[%n@%m %c02]$ '
else
  set prompt=\[`id -un`@`hostname`\]\$\
endif

まあ, 間違いなくどっかから取ってきたもの.



zshでも似たような形に設定した.

PROMPT="[${USER}@`hostname` %~]"$'\n'"%(!.#.$) " # 左側のプロンプト
#RPROMPT=' %~'                                # 右側のプロンプト

PROMPTは, 左側のもの. RPROMPTは, 右側のもの.
RPROMPTを使うのはやめにして, 2段組みにした.

zshoptions

まずは, オプションの設定と解除. setoptが設定でunsetoptが解除(そのまんま).

$ setopt オプション
$ unsetopt オプション

オプションのアンダースコア, 大文字小文字の違いは無視される.



とりあえず, 色々参考にしながらこんなの書いた.
かなり便利や〜.

setopt auto_cd                  # ディレクトリ名でcd
setopt auto_list                # 補完候補が複数あるとき, 一覧表示
setopt auto_menu                # タブキー連打で補完候補を順に適応
setopt auto_param_keys          # 括弧の対応などを自動的に補完
setopt auto_param_slash         # ディレクトリ名の最後に自動的に/を追加
setopt auto_resume              # 中止しているプロセスと同じ名前のコマンドを実行したとき, それを実行
setopt no_beep                  # ビープ音を停止
setopt brace_ccl                # ls {0..100} で ls 0 1 2 3 ... に展開するようにする
setopt correct                  # コマンドのスペルチェックをする
setopt extended_glob            # #, ~, ^を正規表現の一部と扱う
setopt no_flow_control          # C-q, C-sを使わない
setopt hist_ignore_dups         # 直前と同じコマンドラインは, ヒストリに追加しない
setopt hist_ignore_space        # コマンドラインの先頭がスペースの場合, ヒストリに追加しない
setopt hist_no_store            # historyコマンドをヒストリリストから取り除く
setopt hist_save_no_dups        # 古いものと同じコマンドは, ヒストリに書き出さない.
setopt hist_verify              # ヒストリを呼出してから実行する間に一旦編集できるようになる
setopt no_hup                   # HUPシグナルを送らないようにする
setopt ignore_eof               # C-dで終了しないようにする
setopt interactive_comments     # コマンドラインでも#以降をコメントとする
setopt list_types               # 補完候補一覧でls -Fのように種類を表示
setopt long_list_jobs           # jobsの出力をデフォルトで jobs -l にする
setopt magic_equal_subst        # =以降でも補完できるようにする( --prefix=/usrのような )
setopt mark_dirs                # ファイル名の展開でディレクトリ名にマッチした場合, 末尾に/をつける
setopt numeric_glob_sort        # 辞書順ではなく数値順でソート
setopt print_eight_bit          # 補完リストその他でも8ビット文字を表示する.
setopt prompt_subst             # 色を使う
setopt share_history            # 履歴を共有
setopt transient_rprompt        # 右プロンプトに入力がきたら消す

頭にno_がついているのは, nosetoptしたのと同じ.

補完

とりあえず, これで十分.

# デフォルトの補完機能を有効にする
autoload -U compinit
compinit

# 補完侯補をEmacsのキーバインドで動き回る
zstyle ':completion:*:default' menu select=1

# 補完の時に大文字小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# 補完候補を←↓↑→で選択
zstyle ':completion:*:default' menu select true

ヒストリの設定


とりあえず拝借してきた設定をそのまま適用.

HISTFILE="$HOME/.zhistory"      # 履歴ファイル
HISTSIZE=10000                  # メモリ上に保存される $HISTFILE の最大サイズ
SAVEHIST=10000                  # 保存される最大履歴数
function history-all { history -E 1 } # 全履歴の一覧を表示する

キーバインドの設定

まずは, Emacs風の設定を適用.

bindkey -e                      # Emacs風キーバインド

bindkey '^R' history-beginning-search-backward # 先頭マッチのヒストリサーチ
bindkey '^S' history-beginning-search-forward  # 先頭マッチのヒストリサーチ

デフォルトでは, M-p, M-nにバインドされているコマンドを, C-r, C-sで行えるようにする.
このコマンドは, 以前に ls libというコマンドを実行していたならば, ls と入力したあと, C-rとするだけで履歴から ls libをひっぱてきて補完してくれる, というもの.
元々のC-rをつぶしてるけど, いまいち使いこなしてないし, 何よりこれに慣れてしまったから, このままで行く.

エイリアスの設定


tcshの設定を変換しただけ.
何のzshらしさも無い設定.

alias ls="ls -F --show-control-chars --color=auto"
alias la="ls -a"
alias ll="ls -l"
alias lh="ls -lh"

alias rmc="rm *~"
alias del="rm -rf"
alias apv="appletviewer"

alias x="exit"

環境変数

今までのは, .zshrcファイル.
んで, 環境変数は, .zshenvファイルに書くみたい.
マニュアル真面目によんでないからよく分かんないけど.
自分の書いたの.

export LANG=ja_JP.EUC-JP                    # 文字コードは, euc-jp
export JLESSCHARSET=japanese                # 日本語 less
export LESS='-N'                            # less で行番号をつける
export HTTP_HOME="http://www.google.co.jp/" # w3mのホーム
export EDITOR="emacs"           # 標準のエディタは, emacs
export SVN_EDITOR="emacs -nw"   # よく分からんがとりあえず設定.

# For mule-ucs on Debian
export DEB_MULEUCS_UNICODE="yes"
export DEB_MULEUCS_JISX0213="yes"

# PATH の設定
path=($path)

参考にした, また, 参考にしようとしたサイトやファイル

zshのmanを日本語訳してくれてるサイトないかなあと思って探したけど, どうもそれっぽいのが見付からない.

ローカルのファイル

  1. [file:///usr/share/doc/zsh-doc/html/zsh.html:title=zsh: zsh]


はてなダイアリーやグループ

  1. おもてなしの空間 - bash -> zsh 移行レポート
  2. 機能変更、お知らせなど - はてな技術発表会日記


その他

  1. zsh
  2. zshの設定
  3. zsh
  4. man zshoptions
  5. UNIX 今日の技 - UNIX今日の技/zsh
  6. man: zsh
  7. zshのある暮らし - FrontPage
  8. zsh に関するドキュメント(翻訳)
  9. Z-Shell Frequently-Asked Questions

追記

はてなで検索してみたらこんなの見つけた.
恐しく便利. 感謝感謝.

function chpwd() { ls }               # cdでlsも実行する