「Zsh」の版間の差分
細 |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://github.com/」を「https://github.com/」に置換) |
||
(4人の利用者による、間の17版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:コマンドシェル]] |
[[cs:Zsh]] |
[[cs:Zsh]] |
||
[[de:Zsh]] |
[[de:Zsh]] |
||
[[en:Zsh]] |
[[en:Zsh]] |
||
+ | [[es:Zsh]] |
||
[[fr:Zsh]] |
[[fr:Zsh]] |
||
− | [[ |
+ | [[ru:Zsh]] |
+ | [[zh-hans:Zsh]] |
||
− | [http://www.zsh.org Zsh] は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルなシェルです。[[Bash (日本語)|Bash]] と互換性がありながら (デフォルトではありません、{{ic|emulate sh}} を実行した時だけです)、Zsh には多くの利点があります: |
||
+ | [http://www.zsh.org Zsh] は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルなシェルです。[[Bash]] と互換性がありながら (デフォルトではありません、{{ic|emulate sh}} を実行した時だけです)、Zsh には多くの利点があります: |
||
* 高速 |
* 高速 |
||
21行目: | 23行目: | ||
$ echo $SHELL |
$ echo $SHELL |
||
− | [[ |
+ | [[公式リポジトリ]]にある {{Pkg|zsh}} パッケージを[[pacman|インストール]]してください。追加の補完定義を使いたい場合は、{{pkg|zsh-completions}} パッケージもインストールします。 |
=== 初期設定 === |
=== 初期設定 === |
||
35行目: | 37行目: | ||
=== Zsh をデフォルトのシェルにする === |
=== Zsh をデフォルトのシェルにする === |
||
− | シェルが {{ic|/etc/shells}} に記載されていれば、{{ic|chsh}} コマンドを使って root 権限なしでデフォルトシェルを変更することができます。[[ |
+ | シェルが {{ic|/etc/shells}} に記載されていれば、{{ic|chsh}} コマンドを使って root 権限なしでデフォルトシェルを変更することができます。[[公式リポジトリ]]から Zsh をインストールしたのなら、既に {{ic|/etc/shells}} にエントリが作られているはずです。 |
現在使っているユーザーのデフォルトシェルを変更するには: |
現在使っているユーザーのデフォルトシェルを変更するには: |
||
43行目: | 45行目: | ||
{{Note|Zsh をデフォルトシェルとして起動するには、一度ログアウトしてからログインしなおす必要があります。}} |
{{Note|Zsh をデフォルトシェルとして起動するには、一度ログアウトしてからログインしなおす必要があります。}} |
||
− | + | 再ログイン後、Bash とは見た目が異なる Zsh のプロンプトが表示されていることに気づくでしょう。また、次のコマンドを実行することで Zsh が現在のシェルになっていることを確認できます: |
|
$ echo $SHELL |
$ echo $SHELL |
||
− | {{Tip|{{Pkg|bash}} を置き換える場合、{{ic|~/.bashrc}} から {{ic|~/.zshrc}} に (例: プロンプトと[[Bash |
+ | {{Tip|{{Pkg|bash}} を置き換える場合、{{ic|~/.bashrc}} から {{ic|~/.zshrc}} に (例: プロンプトと[[Bash#エイリアス|エイリアス]]) また {{ic|~/.bash_profile}} から {{ic|~/.zprofile}} に (例: [[ログイン時に X を起動|X Window System を起動するコード]]) にコードを移動するとよいでしょう。}} |
== 設定ファイル == |
== 設定ファイル == |
||
ログイン時、Zsh は以下のファイルをこの順番で読み込みます: |
ログイン時、Zsh は以下のファイルをこの順番で読み込みます: |
||
+ | ;{{ic|/etc/zsh/zshenv}}:このファイルにはグローバルな[[#$PATH の設定|コマンド検索パス]]やシステム共通の[[環境変数]]を設定するコマンドを記述します。出力を発生させるコマンドや tty に基づいているコマンドを含めてはいけません。 |
||
;{{ic|~/.zshenv}}:このファイルには[[#$PATH の設定|コマンドの検索パス]]を設定するコマンドや、重要な環境変数を含めます; 出力をするコマンドや tty に基づいているコマンドを含めてはいけません。 |
;{{ic|~/.zshenv}}:このファイルには[[#$PATH の設定|コマンドの検索パス]]を設定するコマンドや、重要な環境変数を含めます; 出力をするコマンドや tty に基づいているコマンドを含めてはいけません。 |
||
+ | ;{{ic|/etc/zsh/zprofile}}:グローバルな設定ファイルであり、ログイン時に読み込まれます。ログイン時に毎回実行するコマンドを記述するのに使われます。Arch Linux では、初めから {{ic|/etc/profile}} を source する[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/zprofile?h=packages/zsh 一行]が入っています。詳しくは[[#全ユーザー共通の設定ファイル|下]]を参照。 |
||
;{{ic|/etc/profile}}:このファイルはログイン時に Bourne 互換シェルによって読み込まれます: ログイン時やアプリケーション固有の設定 {{ic|/etc/profile.d/*.sh}}) を設定します。 |
;{{ic|/etc/profile}}:このファイルはログイン時に Bourne 互換シェルによって読み込まれます: ログイン時やアプリケーション固有の設定 {{ic|/etc/profile.d/*.sh}}) を設定します。 |
||
;{{ic|~/.zprofile}}:このファイルは一般的にユーザーのスクリプトを自動で実行するために使われます。 |
;{{ic|~/.zprofile}}:このファイルは一般的にユーザーのスクリプトを自動で実行するために使われます。 |
||
+ | ;{{ic|/etc/zsh/zshrc}}:グローバルな設定ファイルであり、インタラクティブシェルとして起動した場合に読み込まれます。 |
||
;{{ic|~/.zshrc}}:これは Zsh のメインの設定ファイルです。 |
;{{ic|~/.zshrc}}:これは Zsh のメインの設定ファイルです。 |
||
− | ;{{ic| |
+ | ;{{ic|/etc/zsh/zlogin}}:グローバルな設定ファイルであり、ログインシェルとして起動した場合に、初期化の最後に読み込まれます。 |
+ | ;{{ic|~/.zlogin}}:{{ic|/etc/zsh/zlogin}} と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。 |
||
− | |||
− | + | ;{{ic|/etc/zsh/zlogout}}:グローバルな設定ファイルであり、ログインシェルが終了するときに読み込まれます。 |
|
+ | ;{{ic|~/.zlogout}}:{{ic|/etc/zsh/zlogout}} と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。 |
||
{{Note| |
{{Note| |
||
− | * Arch の {{Pkg|zsh}} パッケージで使われているパスは man ページで使われているデフォルトのパスとは異なっています。 |
+ | * Arch の {{Pkg|zsh}} パッケージで使われているパスは [[man ページ]]で使われているデフォルトのパスとは異なっています。 |
− | * {{ic|$ZDOTDIR}} のデフォルトは {{ic|$HOME}} です |
+ | * {{ic|$ZDOTDIR}} のデフォルトは {{ic|$HOME}} です。 |
* {{ic|/etc/profile}} は Zsh のスタートアップファイルの標準リストに含まれていませんが、{{Pkg|zsh}} パッケージに入っている {{ic|/etc/zsh/zprofile}} から読み込まれます。{{ic|/etc/profile}} で {{ic|$PATH}} 変数を設定すると {{ic|~/.zshenv}} に設定した {{ic|$PATH}} 変数を全て上書きしてしまうので注意してください。これを防ぐには、{{ic|/etc/zsh/zprofile}} をあなたの作ったファイルに置き換えるか、{{ic|~/.zshrc}} から {{ic|$PATH}} 変数を設定してください。 |
* {{ic|/etc/profile}} は Zsh のスタートアップファイルの標準リストに含まれていませんが、{{Pkg|zsh}} パッケージに入っている {{ic|/etc/zsh/zprofile}} から読み込まれます。{{ic|/etc/profile}} で {{ic|$PATH}} 変数を設定すると {{ic|~/.zshenv}} に設定した {{ic|$PATH}} 変数を全て上書きしてしまうので注意してください。これを防ぐには、{{ic|/etc/zsh/zprofile}} をあなたの作ったファイルに置き換えるか、{{ic|~/.zshrc}} から {{ic|$PATH}} 変数を設定してください。 |
||
}} |
}} |
||
72行目: | 78行目: | ||
従って、ユーザー共通の設定をしたいときは {{ic|/etc/zshrc}} ではなく {{ic|/etc/zsh/zshrc}} を使って下さい。これは {{ic|/etc/zsh/zshenv}}, {{ic|/etc/zsh/zlogin}}, {{ic|/etc/zsh/zlogout}} でも同じです。これらのファイルはデフォルトではインストールされないので、必要なときに作成してください。 |
従って、ユーザー共通の設定をしたいときは {{ic|/etc/zshrc}} ではなく {{ic|/etc/zsh/zshrc}} を使って下さい。これは {{ic|/etc/zsh/zshenv}}, {{ic|/etc/zsh/zlogin}}, {{ic|/etc/zsh/zlogout}} でも同じです。これらのファイルはデフォルトではインストールされないので、必要なときに作成してください。 |
||
− | 唯一の例外は zprofile で、これは {{ic|/etc/profile}} を使います。 |
+ | 唯一の例外は {{ic|zprofile}} で、これは {{ic|/etc/profile}} を使います。 |
== ~/.zshrc の設定 == |
== ~/.zshrc の設定 == |
||
96行目: | 102行目: | ||
=== $PATH の設定 === |
=== $PATH の設定 === |
||
+ | 通常、PATH は {{ic|~/.zshenv}} で設定すべきですが、Arch Linux は {{ic|~/.zshenv}} を読み込んだ後に {{ic|/etc/profile}} を読み込みます (全体の流れは[[#設定ファイル|設定ファイル]]を見てください)。 |
||
− | zsh でユーザーごとにシステムパスを設定する方法についての情報はここにあります: http://zsh.sourceforge.net/Guide/zshguide02.html#l24 |
||
− | + | {{ic|$PATH}} の上書きを防ぐために、{{ic|~/.zprofile}} で設定するようにしてください: |
|
+ | |||
− | {{hc|~/.zshenv| |
||
+ | {{hc|1=~/.zprofile|2= |
||
typeset -U path |
typeset -U path |
||
− | path |
+ | path=(~/bin /other/things/in/path $path[@])}} |
+ | |||
+ | 詳しくは [http://zsh.sourceforge.net/Guide/zshguide02.html#l24 Z-Shell のユーザーガイド] を参照してください。 |
||
=== コマンド補完 === |
=== コマンド補完 === |
||
129行目: | 138行目: | ||
=== "command not found" フック === |
=== "command not found" フック === |
||
− | [[Pkgfile |
+ | [[Pkgfile#.22Command_not_found.22_フック|Pkgfile/"Command not found" フック]] を見て下さい。 |
=== 履歴に同じ行が重複するのを避ける === |
=== 履歴に同じ行が重複するのを避ける === |
||
− | 履歴の重複する行を無視 |
+ | 履歴の重複する行を無視するには、以下を追加して下さい: |
{{hc|~/.zshrc| |
{{hc|~/.zshrc| |
||
setopt HIST_IGNORE_DUPS}} |
setopt HIST_IGNORE_DUPS}} |
||
+ | |||
+ | 既に作成された重複を履歴から取り除くには、次を実行: |
||
+ | $ sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history |
||
+ | |||
+ | === ttyctl コマンド === |
||
+ | |||
+ | [http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#index-tty_002c-freezing] には Zsh の {{ic|ttyctl}} コマンドの説明があります。{{ic|ttyctl}} を使うことでターミナルを "freeze/unfreeze" することができます。ターミナルの状態を変更するプログラムは多数存在しますが、終了時にターミナルの設定を元に戻さないことがあります。手動でターミナルをリセットしなくてもいいようにするには、以下を使います: |
||
+ | |||
+ | {{hc|~/.zshrc| |
||
+ | ttyctl -f}} |
||
=== キーバインド === |
=== キーバインド === |
||
Zsh は readline を使っていません、代わりに自身のパワフルな zle を使っています。zle は {{ic|/etc/inputrc}} や {{ic|~/.inputrc}} を読みません。 |
Zsh は readline を使っていません、代わりに自身のパワフルな zle を使っています。zle は {{ic|/etc/inputrc}} や {{ic|~/.inputrc}} を読みません。 |
||
− | zle には [[ |
+ | zle には [[emacs]] モードと [[vi]] モードがあります。デフォルトでは、{{ic|$EDITOR}} 環境変数から emacs と vi どちらのキーをあなたが使いたいのか考えます。この変数が空の場合、デフォルトは emacs モードです。 {{ic|bindkey -v}} や {{ic|bindkey -e}} でモードを変更することが可能です。 |
特殊なキーを動作させるには: |
特殊なキーを動作させるには: |
||
298行目: | 317行目: | ||
|- |
|- |
||
| {{ic|$fg[color]}}||文字色を設定します (red, green, blue など - 太字デフォルト)。 |
| {{ic|$fg[color]}}||文字色を設定します (red, green, blue など - 太字デフォルト)。 |
||
− | | rowspan="4" | Zsh は [[ |
+ | | rowspan="4" | Zsh は [[Bash カラープロンプト|Bash]] とは違ったふうに色を設定します。色を使うには {{ic|.zshrc}} で {{ic|1=PROMPT=}} の前に {{ic|autoload -U colors && colors}} を追加してください。通常、カーソルが動かないように色の設定は {{ic|%{ [...] %} }} の中に記述します。 |
|- |
|- |
||
| {{ic|$fg_no_bold[color]}}|| 太字でない文字色を設定します。 |
| {{ic|$fg_no_bold[color]}}|| 太字でない文字色を設定します。 |
||
320行目: | 339行目: | ||
|} |
|} |
||
− | {{Note|太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、{{ic|$fg['yellow']}} は褐色や濃黄のようになりますが、{{ic|$ |
+ | {{Note|太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、{{ic|$fg['yellow']}} は褐色や濃黄のようになりますが、{{ic|$fg_bold['yellow']}} はやや明るい普通の黄色のようになります。}} |
==== サンプル ==== |
==== サンプル ==== |
||
359行目: | 378行目: | ||
dirs -v |
dirs -v |
||
{{ic|cd -<NUM>}} で訪問済みのフォルダに戻ります。ダッシュの後は自動補完が利用できます。自動補完メニューを使っている場合はとても役に立ちます。 |
{{ic|cd -<NUM>}} で訪問済みのフォルダに戻ります。ダッシュの後は自動補完が利用できます。自動補完メニューを使っている場合はとても役に立ちます。 |
||
+ | |||
+ | {{Note|''zsh'' セッションを複数開いている場合、{{ic|cd}} しようとしても、両方のセッションによって同一のファイルに書き込む衝突が発生するため機能しません。}} |
||
=== ヘルプコマンド === |
=== ヘルプコマンド === |
||
− | [[ |
+ | [[bash]] とは違って、''zsh'' は組み込まれている {{ic|help}} コマンドを有効にしていません。zsh で {{ic|help}} を使うには、以下を {{ic|zshrc}} に追加してください: |
{{bc|1= |
{{bc|1= |
||
384行目: | 405行目: | ||
* 公式リポジトリにある {{Pkg|grml-zsh-config}} パッケージは http://grml.org/zsh から取られて来たもので Zshell の多数の調整が含まれた zshrc ファイルが入っています。これは[https://www.archlinux.org/download/ 毎月リリースされている ISO] のデフォルト設定です。 |
* 公式リポジトリにある {{Pkg|grml-zsh-config}} パッケージは http://grml.org/zsh から取られて来たもので Zshell の多数の調整が含まれた zshrc ファイルが入っています。これは[https://www.archlinux.org/download/ 毎月リリースされている ISO] のデフォルト設定です。 |
||
+ | * 動的なプロンプトとウィンドウタイトル、hardinfo を使う、基本セットアップ => https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc |
||
+ | * https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - 複数の機能を有効にした zshrc、コメントを見て下さい。特徴: ユーザーが電源オフ・再起動・ハイバネートをすることを確認する関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。 |
||
+ | |||
+ | === 設定フレームワーク === |
||
+ | |||
* [https://github.com/robbyrussell/oh-my-zsh oh-my-zsh] は Zsh の設定を管理するための、人気のあるコミュニティドリブンなフレームワークです。便利な関数、ヘルパー、プラグイン、テーマが山ほどバンドルされています。 |
* [https://github.com/robbyrussell/oh-my-zsh oh-my-zsh] は Zsh の設定を管理するための、人気のあるコミュニティドリブンなフレームワークです。便利な関数、ヘルパー、プラグイン、テーマが山ほどバンドルされています。 |
||
* [https://github.com/sorin-ionescu/prezto Prezto - Instantly Awesome Zsh] (AUR の {{AUR|prezto-git}} でインストール可能) は Zsh の設定フレームワークです。デフォルトでリッチなコマンドラインインターフェース環境を構築するモジュール・エイリアス・関数・自動補完・プロンプトテーマが付いています。 |
* [https://github.com/sorin-ionescu/prezto Prezto - Instantly Awesome Zsh] (AUR の {{AUR|prezto-git}} でインストール可能) は Zsh の設定フレームワークです。デフォルトでリッチなコマンドラインインターフェース環境を構築するモジュール・エイリアス・関数・自動補完・プロンプトテーマが付いています。 |
||
+ | * [https://github.com/zsh-users/antigen Antigen] (AUR の {{AUR|antigen-git}} でインストール可能) - zsh のプラグインマネージャ。oh-my-zsh と vundle の影響を受けています。 |
||
− | * 動的なプロンプトとウィンドウタイトル、hardinfo を使う、基本セットアップ => http://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc |
||
− | * https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - 複数の機能を有効にした zshrc、コメントを見て下さい。特徴: ユーザーが電源オフ・再起動・ハイバネートをすることを確認する関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。 |
||
=== アプリケーションの自動起動 === |
=== アプリケーションの自動起動 === |
2018年2月6日 (火) 23:08時点における版
Zsh は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルなシェルです。Bash と互換性がありながら (デフォルトではありません、emulate sh
を実行した時だけです)、Zsh には多くの利点があります:
- 高速
- 高度なタブ補完
- 高度なグロブ
- 高度な行列処理
- 完全にカスタマイズ可能
Zsh FAQ には他にも Zsh をあなたのシェルとして使うべき 理由 が列挙されています。
目次
- 1 インストール
- 2 設定ファイル
- 3 ~/.zshrc の設定
- 4 アンインストール
- 5 参照
インストール
インストールをする前に現在使っているシェルが何なのか知っておくとよいでしょう:
$ echo $SHELL
公式リポジトリにある zsh パッケージをインストールしてください。追加の補完定義を使いたい場合は、zsh-completions パッケージもインストールします。
初期設定
ターミナルで次のコマンドを実行して Zsh が正しくインストールされたか確認してください:
$ zsh
基本的な設定を説明する zsh-newuser-install が表示されるはずです。これをスキップしたい場合、q
を押して下さい。手動で呼び出すには:
$ zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
Zsh をデフォルトのシェルにする
シェルが /etc/shells
に記載されていれば、chsh
コマンドを使って root 権限なしでデフォルトシェルを変更することができます。公式リポジトリから Zsh をインストールしたのなら、既に /etc/shells
にエントリが作られているはずです。
現在使っているユーザーのデフォルトシェルを変更するには:
$ chsh -s $(which zsh)
再ログイン後、Bash とは見た目が異なる Zsh のプロンプトが表示されていることに気づくでしょう。また、次のコマンドを実行することで Zsh が現在のシェルになっていることを確認できます:
$ echo $SHELL
設定ファイル
ログイン時、Zsh は以下のファイルをこの順番で読み込みます:
/etc/zsh/zshenv
- このファイルにはグローバルなコマンド検索パスやシステム共通の環境変数を設定するコマンドを記述します。出力を発生させるコマンドや tty に基づいているコマンドを含めてはいけません。
~/.zshenv
- このファイルにはコマンドの検索パスを設定するコマンドや、重要な環境変数を含めます; 出力をするコマンドや tty に基づいているコマンドを含めてはいけません。
/etc/zsh/zprofile
- グローバルな設定ファイルであり、ログイン時に読み込まれます。ログイン時に毎回実行するコマンドを記述するのに使われます。Arch Linux では、初めから
/etc/profile
を source する一行が入っています。詳しくは下を参照。 /etc/profile
- このファイルはログイン時に Bourne 互換シェルによって読み込まれます: ログイン時やアプリケーション固有の設定
/etc/profile.d/*.sh
) を設定します。 ~/.zprofile
- このファイルは一般的にユーザーのスクリプトを自動で実行するために使われます。
/etc/zsh/zshrc
- グローバルな設定ファイルであり、インタラクティブシェルとして起動した場合に読み込まれます。
~/.zshrc
- これは Zsh のメインの設定ファイルです。
/etc/zsh/zlogin
- グローバルな設定ファイルであり、ログインシェルとして起動した場合に、初期化の最後に読み込まれます。
~/.zlogin
/etc/zsh/zlogin
と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。/etc/zsh/zlogout
- グローバルな設定ファイルであり、ログインシェルが終了するときに読み込まれます。
~/.zlogout
/etc/zsh/zlogout
と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。
全ユーザー共通の設定ファイル
場合によっては Zsh ユーザー全てに設定を適用させたいときもあると思われます。zsh(1) によれば /etc/zshrc
などグローバルな設定ファイルはいくつか存在します。ただし、これは Arch では少し事情が異なっており、代わりに /etc/zsh/
を使うようにコンパイルされています [1]。
従って、ユーザー共通の設定をしたいときは /etc/zshrc
ではなく /etc/zsh/zshrc
を使って下さい。これは /etc/zsh/zshenv
, /etc/zsh/zlogin
, /etc/zsh/zlogout
でも同じです。これらのファイルはデフォルトではインストールされないので、必要なときに作成してください。
唯一の例外は zprofile
で、これは /etc/profile
を使います。
~/.zshrc の設定
Zsh は何も設定しなくても使うことができますが、あなたが使いたい機能はほとんど設定されていないでしょう。ただし Zsh で利用できるカスタム化の道は険しく、Zsh の設定は困難をきわめ多くの時間を浪費するかもしれません。
シンプルな .zshrc
下にはサンプルの設定ファイルが含まれており、Zsh のカスタマイズの方法の例だけでなくデフォルトオプションのセットも提供しています。この設定を使うには .zshrc
という名前でファイルを保存してください。ログインしなおさなくても次を実行することで変更を適用できます:
$ source ~/.zshrc
以下はシンプルな .zshrc
です、基点としてはピッタリでしょう:
~/.zshrc
autoload -U compinit promptinit compinit promptinit # This will set the default prompt to the walters theme prompt walters
$PATH の設定
通常、PATH は ~/.zshenv
で設定すべきですが、Arch Linux は ~/.zshenv
を読み込んだ後に /etc/profile
を読み込みます (全体の流れは設定ファイルを見てください)。
$PATH
の上書きを防ぐために、~/.zprofile
で設定するようにしてください:
~/.zprofile
typeset -U path path=(~/bin /other/things/in/path $path[@])
詳しくは Z-Shell のユーザーガイド を参照してください。
コマンド補完
Zsh の一番魅力的な機能はおそらく先進的な自動補完機能でしょう。少なくとも、.zshrc
で自動補完を有効にしたいと思うはずです。自動補完を有効にするには、以下を追加してください:
~/.zshrc
autoload -U compinit compinit
この設定は ssh/scp/sftp のホスト名の補完も含んでいますが、この機能を動かすには ~/.ssh/known_hosts
で ssh がホスト名をハッシュ化しないようにする必要があります。
矢印キーのインターフェイスを使って自動補完するには、以下を追加して下さい:
~/.zshrc
zstyle ':completion:*' menu select
- メニューを有効にするには、タブを二度押して下さい。
エイリアスでコマンドラインの自動補完を切り替えるには、以下を追加して下さい:
~/.zshrc
setopt completealiases
"command not found" フック
Pkgfile/"Command not found" フック を見て下さい。
履歴に同じ行が重複するのを避ける
履歴の重複する行を無視するには、以下を追加して下さい:
~/.zshrc
setopt HIST_IGNORE_DUPS
既に作成された重複を履歴から取り除くには、次を実行:
$ sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
ttyctl コマンド
[2] には Zsh の ttyctl
コマンドの説明があります。ttyctl
を使うことでターミナルを "freeze/unfreeze" することができます。ターミナルの状態を変更するプログラムは多数存在しますが、終了時にターミナルの設定を元に戻さないことがあります。手動でターミナルをリセットしなくてもいいようにするには、以下を使います:
~/.zshrc
ttyctl -f
キーバインド
Zsh は readline を使っていません、代わりに自身のパワフルな zle を使っています。zle は /etc/inputrc
や ~/.inputrc
を読みません。
zle には emacs モードと vi モードがあります。デフォルトでは、$EDITOR
環境変数から emacs と vi どちらのキーをあなたが使いたいのか考えます。この変数が空の場合、デフォルトは emacs モードです。 bindkey -v
や bindkey -e
でモードを変更することが可能です。
特殊なキーを動作させるには:
~/.zshrc
# create a zkbd compatible hash; # to add other keys to this hash, see: man 5 terminfo typeset -A key key[Home]=${terminfo[khome]} key[End]=${terminfo[kend]} key[Insert]=${terminfo[kich1]} key[Delete]=${terminfo[kdch1]} key[Up]=${terminfo[kcuu1]} key[Down]=${terminfo[kcud1]} key[Left]=${terminfo[kcub1]} key[Right]=${terminfo[kcuf1]} key[PageUp]=${terminfo[kpp]} key[PageDown]=${terminfo[knp]} # setup key accordingly [[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line [[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line [[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode [[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char [[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-history [[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-history [[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char [[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char [[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" beginning-of-buffer-or-history [[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" end-of-buffer-or-history # Finally, make sure the terminal is in application mode, when zle is # active. Only then are the values from $terminfo valid. if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then function zle-line-init () { printf '%s' "${terminfo[smkx]}" } function zle-line-finish () { printf '%s' "${terminfo[rmkx]}" } zle -N zle-line-init zle -N zle-line-finish fi
terminfo を使わない方法
autoload zkbd
を実行してから zkbd
を実行して下さい。キーを押せない場合は (例: F11
はウィンドウを最大化します)、スペースを押してスキップして下さい。zkbd が完了した後、以下を ~/.zshrc
に追加して下さい:
~/.zshrc
autoload zkbd source ~/.zkbd/$TERM-:0.0 # may be different - check where zkbd saved yours [[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char [[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode [[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line [[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history [[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char [[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line [[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history [[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char [[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search [[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
ncurses アプリケーションのキーバインド
ncurses アプリケーションをキーストロークにバインドすることが可能ですが、対話はできません。BUFFER
変数を使って動作させて下さい。以下の例は Alt+\
で ncmpcpp を開きます:
~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp"; zle accept-line; } zle -N ncmpcppShow bindkey '^[\' ncmpcppShow
履歴検索
以下の行を .zshrc に追加して下さい:
~/.zshrc
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward [[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward
これを設定すると、現在の入力で始まる過去のコマンドだけが表示されるようになります。
プロンプト
Zsh には手軽にカラープロンプトを設定する方法があります。.zshrc
でプロンプトが自動ロードされるように設定してください。以下の行を追加することで自動ロードされます:
~/.zshrc
autoload -U promptinit promptinit
次のコマンドを実行することで利用可能なプロンプトを見ることができます:
$ prompt -l
表示されたコマンドの一つを試すには、prompt コマンドの後に使いたいプロンプトの名前を加えて下さい。例えば、walters
プロンプトを使うには、次のように入力します:
$ prompt walters
全ての利用可能なテーマをプレビューするには次のコマンドを使って下さい:
$ prompt -p
プロンプトのカスタマイズ
上述のプロンプトに満足がいかない(もしくはプロンプトを拡張したい)場合、Zsh にはカスタムプロンプトを作る機能が備わっています。全てのシェルに共通な左側だけのプロンプトに加え、Zsh は左右両側を使うプロンプトをサポートしています。PROMPT=
と以下の変数を使うことでプロンプトをカスタマイズできます:
プロンプト変数
コマンド | 説明 | コメント |
---|---|---|
一般 | ||
%n |
ユーザー名 | |
%m |
コンピュータのホスト名 (ドットの前の部分まで) | |
%M |
コンピュータのホスト名 | |
%l |
現在の tty | |
%? |
最後に実行したアプリケーションのリターンコード | |
%# |
ユーザー特権によるプロンプト (root なら # その他なら % )
| |
時間 | ||
%T |
システム時刻 (HH:MM) | |
%* |
システム時刻 (HH:MM:SS) | |
%D |
システム日付 (YY-MM-DD) | |
ディレクトリ | ||
%d |
カレントディレクトリ。 | 数字を前に付けることでパスの一部だけを表示することが可能です。例えば %1d と入力した場合、/usr/bin にいるときは bin と表示されます。負の値も使えます: %-1d は上の例だと / と表示されます。
|
%~ |
カレントディレクトリ。$HOME やそのサブディレクトリにいる場合、$HOME の部分は ~ に置き換えられます。
| |
整形 | ||
%U [...] %u |
下線表示の始まりと終わり | |
%B [...] %b |
太字表示の始まりと終わり | |
%{ [...] %} |
表示されない領域。色の設定をするときに使います。このタグによって Zsh はタグの中にあるものを全て無視します。使用しないとプロンプトの縁やインデントに妙な影響が出ることがあります。 | |
カラー | ||
$fg[color] |
文字色を設定します (red, green, blue など - 太字デフォルト)。 | Zsh は Bash とは違ったふうに色を設定します。色を使うには .zshrc で PROMPT= の前に autoload -U colors && colors を追加してください。通常、カーソルが動かないように色の設定は %{ [...] %} の中に記述します。
|
$fg_no_bold[color] |
太字でない文字色を設定します。 | |
$fg_bold[color] |
太字の文字色を設定します。 | |
$reset_color |
文字色をデフォルトの色に戻します。 |
利用できるカラー | |
---|---|
black または 0 |
red または 1
|
green または 2 |
yellow または 3
|
blue または 4 |
magenta または 5
|
cyan または 6 |
white または 7
|
サンプル
以下のようにすることで左右両側にプロンプトを表示できます:
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#" RPROMPT="[%{$fg_no_bold[yellow]%}%?%{$reset_color%}]"
次のようになります (色は省略):
username@host ~ % [0]
ディレクトリスタック
Zsh を設定して DIRSTACKSIZE 最後に訪れたフォルダを覚えさせることが可能です。これにより素早く cd することができます。設定ファイルにいくつか設定を加える必要があります:
.zshrc
DIRSTACKFILE="$HOME/.cache/zsh/dirs" if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then dirstack=( ${(f)"$(< $DIRSTACKFILE)"} ) [[ -d $dirstack[1] ]] && cd $dirstack[1] fi chpwd() { print -l $PWD ${(u)dirstack} >$DIRSTACKFILE } DIRSTACKSIZE=20 setopt autopushd pushdsilent pushdtohome ## Remove duplicate entries setopt pushdignoredups ## This reverts the +/- operators. setopt pushdminus
次のコマンドでディレクトリスタックを表示できます:
dirs -v
cd -<NUM>
で訪問済みのフォルダに戻ります。ダッシュの後は自動補完が利用できます。自動補完メニューを使っている場合はとても役に立ちます。
ヘルプコマンド
bash とは違って、zsh は組み込まれている help
コマンドを有効にしていません。zsh で help
を使うには、以下を zshrc
に追加してください:
autoload -U run-help autoload run-help-git autoload run-help-svn autoload run-help-svk unalias run-help alias help=run-help
Fish のようなシンタックスハイライト
Fish には強力なシェルシンタックスハイライトがあります。これを zsh で使うには、公式リポジトリから zsh-syntax-highlighting をインストールして以下を zshrc に追加します:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
サンプル .zshrc ファイル
以下は .zshrc
ファイルのリストです。自由に自分のファイルを追加してください:
- 公式リポジトリにある grml-zsh-config パッケージは http://grml.org/zsh から取られて来たもので Zshell の多数の調整が含まれた zshrc ファイルが入っています。これは毎月リリースされている ISO のデフォルト設定です。
- 動的なプロンプトとウィンドウタイトル、hardinfo を使う、基本セットアップ => https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc
- https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - 複数の機能を有効にした zshrc、コメントを見て下さい。特徴: ユーザーが電源オフ・再起動・ハイバネートをすることを確認する関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。
設定フレームワーク
- oh-my-zsh は Zsh の設定を管理するための、人気のあるコミュニティドリブンなフレームワークです。便利な関数、ヘルパー、プラグイン、テーマが山ほどバンドルされています。
- Prezto - Instantly Awesome Zsh (AUR の prezto-gitAUR でインストール可能) は Zsh の設定フレームワークです。デフォルトでリッチなコマンドラインインターフェース環境を構築するモジュール・エイリアス・関数・自動補完・プロンプトテーマが付いています。
- Antigen (AUR の antigen-gitAUR でインストール可能) - zsh のプラグインマネージャ。oh-my-zsh と vundle の影響を受けています。
アプリケーションの自動起動
Zsh はいつでも /etc/zsh/zshenv
と $ZDOTDIR/.zshenv
を実行します。なのでこれらのファイルをあまり肥大化させないでください。
シェルがログインシェルの場合、/etc/profile
そして $ZDOTDIR/.zprofile
からコマンドが読み込まれます。次に、シェルがインタラクティブの場合、/etc/zsh/zshrc
さらに $ZDOTDIR/.zshrc
からコマンドが読み込まれます。最後に、シェルがログインシェルの場合、/etc/zsh/zlogin
ついで $ZDOTDIR/.zlogin
が読み込まれます。
man zsh
の STARTUP/SHUTDOWN FILES セクションも参照してください。
アンインストール
Zsh があなたに合わないと感じて Bash に戻りたいときは、Zsh パッケージを削除する前に必ず、まずデフォルトシェルを変更して下さい。
ターミナルで次のコマンドを root で実行して下さい:
# chsh -s /bin/bash user
Zsh を使っている全てのユーザーで実行して下さい。
これで安全に Zsh パッケージを削除することができます。
以上を行わなかった場合、root で /etc/passwd
を編集することで Bash にデフォルトシェルを戻すことができます。
例:
編集前:
username:x:1000:1000:Full Name,,,:/home/username:/bin/zsh
編集後:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
参照
- ユーザーガイド
- The Z Shell Manual (different format available here)
- Zsh FAQ
- zsh-lovers(1) (公式リポジトリの zsh-lovers で利用できます)
- Zsh Wiki
- Gentoo Wiki: Zsh/HOWTO
- Bash2Zsh Reference Card