zshの導入から各種設定
tcsh
zsh: Functions Index: P – U
zshのキーバインドで余っているキーを探す - mollifier delta blog
http://www.ayu.ics.keio.ac.jp/~mukai/translate/zshoptions.html
http://journal.mycom.co.jp/column/zsh/index.html
http://journal.mycom.co.jp/column/zsh/001/index.html
http://journal.mycom.co.jp/column/zsh/002/index.html
http://journal.mycom.co.jp/column/zsh/003/index.html
http://journal.mycom.co.jp/column/zsh/004/index.html
http://journal.mycom.co.jp/column/zsh/005/index.html
http://journal.mycom.co.jp/column/zsh/006/index.html
http://memo.officebrook.net/20090205.html
順次追加。
まず、compinit
以下を~/.zshrcに記述する。
autoload -U compinit compinit
~/.zprofileの使いどころを知る。
ログインシェルとしてzshが起動された場合
1 ~/.zshenv
2 ~/.zprofile
3 ~/.zshrc
4 ~/.zlogin
インタラクティブシェル(ログインシェルとしてではない)としてzshが起動された場合
1 ~/.zshenv
2 ~/.zshrc
シェルスクリプトを実行するコマンドとしてzshが起動された場合
1 ~/.zshenv
ログインシェルとして起動されたzshからログアウトする場合
1 ~/.zlogout
なので、基本的に設定は.zshrcファイルに書いておけばいい。環境変数を設定するなどログイン時に一度だけ実行すればいいような設定だけ.zprofileに書いておく。一時的にzshをインタラクティブシェルとして起動するような使い方をする場合はぜんぶ.zshrcに書いておけばいい。
.zshenvはシェルスクリプトコマンドとしてzshを実行する場合にも読み込まれるので、予期せぬ設定をしておくとハマることもある。よくわからなければ使わない方がいいだろう
環境変数は~/.zprofileに書こうと決める。
プロンプトの設定
以下、4種類のプロンプトを設定する。
プロンプト名 | 説明 |
---|---|
PROMPT | 通常時の |
PROMPT2 | forやwhileなど複数行入力時の |
SPROMPT | 入力ミスを確認時の |
RPROMPT | 右側に表示 |
変更
PROMPT
RED="%{${fg[red]}%}" YELLOW="%{${fg[yellow]}%}" RESET="%{${reset_color}%}" PROMPT="${RED}%n@%m ${YELLOW}%~ ${RED}%# ${RESET}"
ターミナルのタイトルに「ユーザ@ホスト:カレントディレクトリ」と表示させる
~/.zshrcに以下を記述する。
case "${TERM}" in kterm*|xterm*) precmd() { echo -ne "\033]0;${USER}@${HOST%%.*}:${PWD}\007" } ;; esac
ヒストリ関連の設定をする
~/.zprofileに以下を記載する。
HISTFILE=~/.zhistory SAVEHIST=100000 HISTSIZE=10000
オプション名 | 説明 |
---|---|
HISTFILE | コマンド履歴を保存するファイル名 |
SAVEHIST | 保存されるヒストリーの数 |
HISTSIZE | 記憶されるヒストリー数 |
以下の内容を~/.zshrcに記載する。
#存在しないヒストリにビープ音 setopt hist_beep #zshがセッションを終了した順にファイルに追記 #setopt append_history #各端末でコマンドを実行した順番にヒストリへ記録 setopt inc_append_history # !を使ったヒストリ展開を行う setopt bang_hist #ヒストリ展開を行ったとき、すぐ実行せず、一度読込む setopt hist_verify #ヒストリから関数定義を除く setopt hist_no_functions #historyコマンドを記録しない setopt hist_no_store #行頭スペースコマンドは記録しない #setopt histignorespace #同じコマンド続けて実行,重複記録しない setopt hist_ignore_dups #ヒストリ内にまったく同じ行、古い削除、新しい記録 setopt hist_ignore_all_dups #古いヒストリが削除されるとき #まったく同じ行があればそれを優先して削除 setopt hist_expire_dups_first #ファイルに書き出すとき古いコマンドと同じなら無視 #setopt hist_save_no_dups #実行時間も記録 #書式 #:実行時間:経過時間:コマンド setopt extended_history #余分な空白を排除して記録 setopt hist_reduce_blanks #複数の端末でリアルタイムにヒストリを共有 setopt share_history
キーバインド設定をする
以下の内容を~/.zshrcに記載する。
# d default # e emacs # v vi bindkey -d # シェルの操作はemacsな感じで # わざわざ記述しておく bindkey "^A" beginning-of-line # 行頭へジャンプ bindkey "^B" backward-char # ←キー bindkey "^D" delete-char-or-list # deleteキー カーソル上の文字を削除 bindkey "^E" end-of-line # 行末へジャンプ bindkey "^F" forward-char # →キー bindkey "^G" send-break # コマンド入力を実行せずに無視して次の行へ bindkey "^H" backward-char # ←キー bindkey "^I" expand-or-complete # 展開または補完 #bindkey "^J" accept-line # screen用に使用 bindkey "^K" kill-line # カーソルから行末までを削除 bindkey "^L" clear-screen # クリアスクリーン bindkey "^M" accept-line # コマンド行のコマンドを実行 Enterの代わりに #bindkey "^O" accept-line-and-down-history # 使い(どころ|かた)が分からない #bindkey "^Q" push-line # 使い(どころ|かた)が分からない bindkey "^R" history-incremental-search-backward # インクリメンタルサーチ bindkey "^S" history-incremental-search-forward # インクリメンタルサーチ #bindkey "^T" transpose-chars # 文字の順番を入れ替える bindkey "^U" kill-whole-line # 一行削除 #bindkey "^V" quoted-insert # 文字を挿入 使う必要性がないと思う bindkey "^W" backward-kill-word # カーソルから行頭までを削除 bindkey "^N" history-beginning-search-forward # 超絶に使う bindkey "^P" history-beginning-search-backward # 超絶に使う
http://journal.mycom.co.jp/column/zsh/004/index.htmlで
記載されている以下の内容がよく分からず、調べる。
autoload history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^P" history-beginning-search-backward-end bindkey "^N" history-beginning-search-forward-end
autoloadのオプション「-U」については以下のリンク先で分かったつもり。
http://blog.livedoor.jp/miya_k_/archives/206513.html
http://blog.livedoor.jp/miya_k_/archives/227129.html
http://blog.livedoor.jp/miya_k_/archives/232122.html
「-z」と「-k」についてはよく分からない。
zleがよく分からずに、twitterで呟いていたらid:hijouguchiさんが助けてくれる。しかし、まだ微妙。
rdera on Twitter: "zshの「zle -N」ってのが分からなくて、調べてる。"
hijouguchi on Twitter: "@rdera zle -N hoge でhogeという名前のシェル関数から同名のzleウィジェットを作成するみたいです。"
hijouguchi on Twitter: "@rdera 何て説明していいのかちょっと悩みますが、ちょっとしたコマンドみたいなものですかね。 「man zstyle」で・"
保留して、先に進む。
ディレクトリ関連の設定
以下の内容を~/.zshrcに記載する。
#####ディレクトリ関連##### #cd省略でディレクトリ移動 setopt auto_cd # ~を必要せずに移動 #setopt cdable_vars #特に必要がないかと unsetopt cdable_vars #cdコマンドでディレクトリスタックに保存 setopt auto_pushd #ディレクトリスタックに重複して記録しない setopt pushd_ignore_dups #移動先がシンボリックリンクならば実際のディレクトリに移動する setopt chase_links #パスに..が含まれる シンボリックリンクではなく実際のディレクトリに移動 setopt chase_dots #引数なしでpushdするとpushd $HOMEとして実行 setopt pushd_to_home
コマンドのスペル訂正関連の設定
以下の設定を~/.zshrcに記載する。
#コマンドのスペル訂正をしてくれる # y 訂正コマンドを実行 # n 入力したコマンドが実行 # a 実行を中断 abort # e コマンドライン編集 edit setopt correct #引数についてもスペル訂正を試みる #それは面倒なことになるかも nocorrectをコマンド前 #setopt correct_all unsetopt correct_all #スペル訂正時にDVORAK配列を前提にする #setopt dvorak unsetopt dvorak
補完関係の設定
以下の設定を~/.zshrcに記載する。
#####補完関係##### #補完のときプロンプトの位置を変えない setopt always_last_prompt #補完候補が複数あるとき自動でメニューをリストアップ setopt auto_list #補完要求に対してメニューをリストアップ setopt auto_menu #補完候補を詰めて表示する setopt list_packed #補完の表示を水平方向に setopt list_rows_first #補完候補の表示を親切に ls -F # /がディレクトリ # @がシンボリックリンク setopt list_types # tabキーの節約 setopt menu_complete #エイリアスに対して別の補完定義を telnet tt #setopt complete_aliases setopt no_complete_aliases #ディレクトリ 補完 /を付与 setopt auto_param_slash #スペースで /を削除 setopt auto_remove_slash #よく分からない setopt auto_name_dirs #補完候補表示時にビープ音をならさない setopt nolistbeep
ユーザ毎の設定を行う
以下を~/.zshrcに記載する。
#ユーザ毎の設定を行う case ${UID} in 0) #rootユーザの場合 ;; *) #一般ユーザの場合 ;; esac
実験的な内容を記述したファイルを読み込む方法
以下を~/.zshrcに記載する。
#実験的な設定をに書き込んでおく [ -f ~/.zshrc.lab ] && source ~/.zshrc.lab
追記していきます。