「Zsh」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「[[zh-CN:」を「[[zh-hans:」に置換)
(5人の利用者による、間の33版が非表示)
7行目: 7行目:
 
[[ru:Zsh]]
 
[[ru:Zsh]]
 
[[zh-hans:Zsh]]
 
[[zh-hans:Zsh]]
[http://www.zsh.org Zsh] は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルなシェルです。[[Bash]] と互換性がありながら (デフォルトではありません、{{ic|emulate sh}} を実行した時だけです)、Zsh には多くの利点があります:
+
[http://www.zsh.org Zsh] は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルな[[コマンドシェル|シェル]]です。POSIX sh と互換性がありながら (デフォルトではありません、{{ic|emulate sh}} を実行した時だけです)、[http://zsh.sourceforge.net/Guide/zshguide06.html タブ補完]の改善や [http://zsh.sourceforge.net/Doc/Release/Expansion.html グロビング]などの利点があります
   
  +
[http://zsh.sourceforge.net/FAQ/zshfaq01.html#l4 Zsh FAQ] には他にも Zsh をあなたのシェルとして使うべき理由が列挙されています。
* 高速
 
* 高度なタブ補完
 
* 高度なグロブ
 
* 高度な行列処理
 
* 完全にカスタマイズ可能
 
 
Zsh FAQ には他にも Zsh をあなたのシェルとして使うべき [http://zsh.sourceforge.net/FAQ/zshfaq01.html#l4 理由] が列挙されています。
 
   
 
== インストール ==
 
== インストール ==
31行目: 25行目:
 
$ zsh
 
$ zsh
   
基本的な設定を説明する '''zsh-newuser-install''' が表示されるはずです。これをスキップしたい場合、{{ic|q}} を押して下さい。手動で呼び出すには:
+
基本的な設定を説明する '''zsh-newuser-install''' が表示されるはずです。これをスキップしたい場合、{{ic|q}} を押して下さい。表示されない場合は、次のコマンドで手動で呼び出すことができます:
   
$ zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
+
$ autoload -Uz zsh-newuser-install
  +
$ zsh-newuser-install -f
  +
  +
{{Note|仮想端末のサイズが少なくとも 72×15 であることを確認してください。そうでないと ''zsh-newuser-install'' は実行されません。}}
   
 
=== Zsh をデフォルトのシェルにする ===
 
=== Zsh をデフォルトのシェルにする ===
51行目: 48行目:
 
{{Tip|{{Pkg|bash}} を置き換える場合、{{ic|~/.bashrc}} から {{ic|~/.zshrc}} に (例: プロンプトと[[Bash#エイリアス|エイリアス]]) また {{ic|~/.bash_profile}} から {{ic|~/.zprofile}} に (例: [[ログイン時に X を起動|X Window System を起動するコード]]) にコードを移動するとよいでしょう。}}
 
{{Tip|{{Pkg|bash}} を置き換える場合、{{ic|~/.bashrc}} から {{ic|~/.zshrc}} に (例: プロンプトと[[Bash#エイリアス|エイリアス]]) また {{ic|~/.bash_profile}} から {{ic|~/.zprofile}} に (例: [[ログイン時に X を起動|X Window System を起動するコード]]) にコードを移動するとよいでしょう。}}
   
== 設定ファイル ==
+
== スタートアップ/シャットダウン ファイル ==
  +
  +
{{Tip|
  +
* インタラクティブシェルとログインシェルの説明、およびスタートアップファイルに何を入れるかについては、[http://zsh.sourceforge.net/Guide/zshguide02.html A User's Guide to the Z-Shell] を参照してください。
  +
* Zsh 構成ファイルには [https://wiki.archlinux.jp/index.php/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%B7%E3%82%A7%E3%83%AB#.E6.A8.99.E6.BA.96.E5.8C.96 標準パスの実装] を検討できます。}}
  +
  +
{{Note|
  +
*{{ic|$ZDOTDIR}} が設定されていない場合は、代わりに {{ic|$HOME}} が使用されます。
  +
*オプション {{ic|RCS}} がいずれかのファイルで設定されていない場合、そのファイルの後に構成ファイルは読み取りません。
  +
*オプション {{ic
  +
|GLOBAL_RCS}} がいずれかのファイルで設定されていない場合、そのファイルの後にグローバル構成ファイル({{ic|/etc/zsh/*}})は読み取りません。
  +
}}
   
 
ログイン時、Zsh は以下のファイルをこの順番で読み込みます:
 
ログイン時、Zsh は以下のファイルをこの順番で読み込みます:
102行目: 110行目:
 
=== $PATH の設定 ===
 
=== $PATH の設定 ===
   
  +
通常、PATH は {{ic|~/.zshenv}} で設定すべきですが、Arch Linux は {{ic|~/.zshenv}} を読み込んだ後に {{ic|/etc/profile}} を読み込みます (全体の流れは[[#設定ファイル|設定ファイル]]を見てください)。
zsh でユーザーごとにシステムパスを設定する方法についての情報はここにあります: http://zsh.sourceforge.net/Guide/zshguide02.html#l24
 
   
以下を {{ic|~/.zshenv}} に追加してください:
+
{{ic|$PATH}} の上書きを防ぐために、{{ic|~/.zprofile}} で設定するようにしてください:
  +
{{hc|~/.zshenv|
 
  +
{{hc|1=~/.zprofile|2=
 
typeset -U path
 
typeset -U path
path=(~/bin /other/things/in/path $path[@])}}
+
path=(~/bin /other/things/in/path $path[@])}}
  +
  +
詳しくは [http://zsh.sourceforge.net/Guide/zshguide02.html#l24 Z-Shell のユーザーガイド] を参照してください。
   
 
=== コマンド補完 ===
 
=== コマンド補完 ===
132行目: 143行目:
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
 
setopt completealiases}}
 
setopt completealiases}}
 
=== "command not found" フック ===
 
 
[[Pkgfile#.22Command_not_found.22_フック|Pkgfile/"Command not found" フック]] を見て下さい。
 
 
=== 履歴に同じ行が重複するのを避ける ===
 
 
履歴の重複する行を無視するには、以下を追加して下さい:
 
{{hc|~/.zshrc|
 
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}}
 
   
 
=== キーバインド ===
 
=== キーバインド ===
202行目: 193行目:
 
}}
 
}}
   
  +
{{Note|特定のキーの組み合わせに対して適切なシーケンスを取得するには、 {{ic|cat}} を起動するか、パラメーターなしで {{ic|read}} を押します。 その後、端末に印刷する必要があります。 {{ic|Ctrl+c}} を使用して両方を再び閉じることができます。}}
{{Note|To get the proper sequences for certain key combinations, start {{ic|cat}} or {{ic|read}} without any parameters and press them; they should then be printed in the terminal. Both can be closed again via {{ic|Ctrl+c}}.}}
 
   
==== terminfo を使わない方法 ====
+
==== 履歴検索 ====
   
  +
{{ic|key}} 配列を設定し、ZLEがアプリケーションモードになっている事を確認して、以下の手順を使用してください。[[#キーバインド]] を参照してください。
{{ic|autoload zkbd}} を実行してから {{ic|zkbd}} を実行して下さい。キーを押せない場合は (例: {{ic|F11}} はウィンドウを最大化します)、スペースを押してスキップして下さい。zkbd が完了した後、以下を {{ic|~/.zshrc}} に追加して下さい:
 
   
  +
履歴検索を有効にするには、以下の行を {{ic|.zshrc}} ファイルに追加します:
{{hc|~/.zshrc|autoload zkbd
 
source ~/.zkbd/$TERM-:0.0 # may be different - check where zkbd saved yours
 
   
  +
{{hc|~/.zshrc|
[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
 
  +
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
 
  +
zle -N up-line-or-beginning-search
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
 
  +
zle -N down-line-or-beginning-search
[[ -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[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history
+
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
[[ -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
 
 
}}
 
}}
   
  +
これにより、{{ic|up}} または {{ic|down}} キーを押すと、現在の行から現在のカーソル位置までに一致する過去のコマンドのみが表示されます。
==== ncurses アプリケーションのキーバインド ====
 
  +
  +
==== Shift, Alt, Ctrl and Meta modifiers ====
  +
  +
xterm-compatible terminals can use extended key-definitions from {{man|5|user_caps}}. Those are combinations of {{ic|Shift}}, {{ic|Alt}}, {{ic|Ctrl}} and {{ic|Meta}} together with {{ic|Up}}, {{ic|Down}}, {{ic|Left}}, {{ic|Right}}, {{ic|PageUp}}, {{ic|PageDown}}, {{ic|Home}}, {{ic|End}} or {{ic|Del}}.
  +
  +
For example, for {{ic|Ctrl+Left}} to move to the beginning of the previous word and {{ic|Ctrl+Right}} to move to the beginning of the next word:
   
ncurses アプリケーションをキーストロークにバインドすることが可能ですが、対話はできません。{{ic|BUFFER}} 変数を使って動作させて下さい。以下の例は {{ic|Alt+\}} で ncmpcpp を開きます:
 
 
{{hc|~/.zshrc|2=
 
{{hc|~/.zshrc|2=
  +
key[Control-Left]="${terminfo[kLFT5]}"
ncmpcppShow() { BUFFER="ncmpcpp"; zle accept-line; }
 
  +
key[Control-Right]="${terminfo[kRIT5]}"
zle -N ncmpcppShow
 
  +
bindkey '^[\' ncmpcppShow
 
  +
[[ -n "${key[Control-Left]}" ]] && bindkey -- "${key[Control-Left]}" backward-word
  +
[[ -n "${key[Control-Right]}" ]] && bindkey -- "${key[Control-Right]}" forward-word
 
}}
 
}}
   
=== 履歴検索 ===
+
=== プロンプト ===
   
  +
Zsh offers the options of using a prompt theme or, for users who are dissatisfied with the themes (or want to expand their usefulness), the possibility to build a custom prompt.
以下の行を .zshrc に追加して下さい:
 
   
  +
==== Prompt themes ====
{{hc|~/.zshrc|<nowiki>
 
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward
 
[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward
 
</nowiki>}}
 
   
  +
プロンプトテーマは、Zshで色付きのプロンプトを設定するためのすばやく簡単な方法です。それらの詳細については、{{man|1|zshcontrib|PROMPT THEMES}} を参照してください。
これを設定すると、現在の入力で始まる過去のコマンドだけが表示されるようになります。
 
 
=== プロンプト ===
 
   
Zsh には手軽にカラープロンプトを設定する方法あります。{{ic|.zshrc}} でプロンプトが自動ロードされるよう設定してください。以下の行を追加することで自動ロードされます:
+
テーマを使用するにはプロンプトテーマシステム{{ic|.zshrc}} 自動ロードされるよう設定されていることを確認してください。自動ロードを行うには、以下の行を追加ます
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
autoload -U promptinit
+
autoload -Uz promptinit
 
promptinit
 
promptinit
 
}}
 
}}
   
次のコマンドを実行することで利用可能なプロンプトを見ることができます:
+
次のコマンドを実行することで利用可能なプロンプトを見ることができます:
  +
 
 
$ prompt -l
 
$ prompt -l
   
表示されたコマンドの一つを試すには、prompt コマンドの後に使いたいプロンプトの名前を加えて下さい。例えば、{{ic|walters}} プロンプトを使うには、次のように入力します:
+
例えば、walters プロンプトを使うには、次のように入力します:
   
 
$ prompt walters
 
$ prompt walters
   
全ての利用可能なテーマをプレビューするには次のコマンドを使って下さい:
+
全ての利用可能なテーマをプレビューするには次のコマンドを使って下さい:
   
 
$ prompt -p
 
$ prompt -p
   
=== プロンプトのカスタマイ ===
+
===== プロンプトテーの手動ンストール =====
  +
  +
外部の設定管理ツールを使わずに、テーマを手動でインストールすることもできます。ローカルインストールの場合、最初にフォルダを使用し、それを {{ic|fpath}} 配列に通過します。例:
  +
  +
$ mkdir ~/.zprompts
  +
$ fpath=("$HOME/.zprompts" "$fpath[@]")
  +
  +
次に、このフォルダにテーマファイルのシンボリックリンクを作成します:
  +
  +
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
  +
  +
代わりに、テーマをグローバルにインストールする場合は、次のようにします:
  +
  +
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
  +
  +
これで、次のコマンドを使ってアクティブ化できるはずです:
  +
  +
$ prompt mytheme
  +
  +
すべてが機能する場合は、{{ic|.zshrc}} をそれに応じて編集することができます。
  +
  +
==== プロンプトのカスタマイズ ====
   
上述のプロンプトに満足がいかないもしくはプロンプトを拡張したい場合、Zsh にはカスタムプロンプトを作る機能が備わっています。全てのシェルに共通な左側だけのプロンプトに加え、Zsh は左右両側を使うプロンプトをサポートしています。{{ic|1=PROMPT=}} と以下の変数を使うことでプロンプトをカスタマイズできます:
+
上述のプロンプトに満足がいかない(もしくはプロンプトを拡張したい)場合、Zsh にはカスタムプロンプトを作る機能が備わっています。全てのシェルに共通な左側だけのプロンプトに加え、Zsh は左右両側を使うプロンプトをサポートしています。{{ic|1=PROMPT=}} と以下の変数を使うことでプロンプトをカスタマイズできます:
   
==== プロンプト変数 ====
+
===== プロンプト変数 =====
   
 
{| class="wikitable"
 
{| class="wikitable"
338行目: 347行目:
 
{{Note|太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、{{ic|$fg['yellow']}} は褐色や濃黄のようになりますが、{{ic|$fg_bold['yellow']}} はやや明るい普通の黄色のようになります。}}
 
{{Note|太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、{{ic|$fg['yellow']}} は褐色や濃黄のようになりますが、{{ic|$fg_bold['yellow']}} はやや明るい普通の黄色のようになります。}}
   
==== サンプル ====
+
===== サンプル =====
   
 
以下のようにすることで左右両側にプロンプトを表示できます:
 
以下のようにすることで左右両側にプロンプトを表示できます:
346行目: 355行目:
 
次のようになります (色は省略):
 
次のようになります (色は省略):
 
username@host ~ % [0]
 
username@host ~ % [0]
  +
  +
=== サンプル .zshrc ファイル ===
  +
  +
以下は {{ic|.zshrc}} ファイルのリストです。自由に自分のファイルを追加してください:
  +
  +
* 公式リポジトリにある {{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 を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。
  +
  +
== ヒントとテクニック ==
  +
  +
=== 履歴に同じ行が重複するのを避ける ===
  +
  +
履歴の重複する行を無視するには、以下を追加して下さい:
  +
{{hc|~/.zshrc|
  +
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}}
  +
  +
==== terminfo を使わない方法 ====
  +
  +
{{ic|autoload zkbd}} を実行してから {{ic|zkbd}} を実行して下さい。キーを押せない場合は (例: {{ic|F11}} はウィンドウを最大化します)、スペースを押してスキップして下さい。zkbd が完了した後、以下を {{ic|~/.zshrc}} に追加して下さい:
  +
  +
{{hc|~/.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 アプリケーションをキーストロークにバインドすることが可能ですが、対話はできません。{{ic|BUFFER}} 変数を使って動作させて下さい。以下の例は {{ic|Alt+\}} で ncmpcpp を開きます:
  +
{{hc|~/.zshrc|2=
  +
ncmpcppShow() { BUFFER="ncmpcpp"; zle accept-line; }
  +
zle -N ncmpcppShow
  +
bindkey '^[\' ncmpcppShow
  +
}}
  +
  +
=== 履歴検索 ===
  +
  +
以下の行を .zshrc に追加して下さい:
  +
  +
{{hc|~/.zshrc|<nowiki>
  +
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward
  +
[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward
  +
</nowiki>}}
  +
  +
これを設定すると、現在の入力で始まる過去のコマンドだけが表示されるようになります。
   
 
=== ディレクトリスタック ===
 
=== ディレクトリスタック ===
390行目: 465行目:
 
}}
 
}}
   
=== Fish のようなシンタックスハイライト ===
+
=== アプリケーの自動起動 ===
   
  +
Zsh はいつでも {{ic|/etc/zsh/zshenv}} と {{ic|$ZDOTDIR/.zshenv}} を実行します。なのでこれらのファイルをあまり肥大化させないでください。
[[Fish]] には強力なシェルシンタックスハイライトがあります。これを zsh で使うには、公式リポジトリから {{pkg|zsh-syntax-highlighting}} をインストールして以下を zshrc に追加します:
 
{{bc|
 
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
 
}}
 
   
  +
シェルがログインシェルの場合、{{ic|/etc/profile}} そして {{ic|$ZDOTDIR/.zprofile}} からコマンドが読み込まれます。次に、シェルがインタラクティブの場合、{{ic|/etc/zsh/zshrc}} さらに {{ic|$ZDOTDIR/.zshrc}} からコマンドが読み込まれます。最後に、シェルがログインシェルの場合、{{ic|/etc/zsh/zlogin}} ついで {{ic|$ZDOTDIR/.zlogin}} が読み込まれます。
=== サンプル .zshrc ファイル ===
 
   
以下は {{ic|.zshrc}} ファイルリストです。自由に自分のファイルを追加してください:
+
{{ic|man zsh}} の ''STARTUP/SHUTDOWN FILES'' セクションも参照してください
   
  +
== サードパーティ拡張 ==
* 公式リポジトリにある {{Pkg|grml-zsh-config}} パッケージは http://grml.org/zsh から取られて来たもので Zshell の多数の調整が含まれた zshrc ファイルが入っています。これは[https://www.archlinux.org/download/ 毎月リリースされている ISO] のデフォルト設定です。
 
* 動的なプロンプトとウィンドウタイトル、hardinfo を使う、基本セットアップ => http://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc
 
* https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - 複数の機能を有効にした zshrc、コメントを見て下さい。特徴: ユーザーが電源オフ・再起動・ハイバネートをすることを確認する関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。
 
   
 
=== 設定フレームワーク ===
 
=== 設定フレームワーク ===
409行目: 479行目:
 
* [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 の影響受けています。
+
* [https://github.com/zimfw/zimfw Zim] (AUR の {{AUR|zsh-zim-git}} でインストール可能) は、驚異的な速度とモジュラー拡張機能備えたZsh構成フレームワークです。
   
=== リケーショの自動起動 ===
+
=== プラグイマネージャー ===
   
  +
* {{App|Antibody|Antigen に似たパフォーマンス重視のプラグインマネージャー |https://github.com/getantibody/antibody|{{AUR|antibody}}}}
Zsh はいつでも {{ic|/etc/zsh/zshenv}} と {{ic|$ZDOTDIR/.zshenv}} を実行します。なのでこれらのファイルをあまり肥大化させないでください。
 
  +
* {{App|zinit (previously "zplugin")|柔軟で高速な Zsh プラグインマネージャー |http://github.com/zdharma/zinit|{{AUR|zsh-zplugin-git}}}}
  +
* {{App|zr|Rust で書かれたシンプルで高速なプラグインマネージャー |https://github.com/jedahan/zr|{{AUR|zr-git}}}}
  +
* {{App|Antigen|oh-my-zsh と vundle に触発された Zsh のプラグインマネージャー [https://github.com/zsh-users/antigen/issues/673 ABANDONED]|https://github.com/zsh-users/antigen|{{AUR|antigen-git}}}}
  +
* {{App|zgen|Zsh 用の軽量でシンプルなプラグインマネージャー [https://github.com/tarjoilija/zgen/issues/123 ABANDONED]|https://github.com/tarjoilija/zgen|{{AUR|zgen-git}}}}
  +
* {{App|zplug|Zsh 用の次世代プラグインマネージャー [https://github.com/zplug/zplug/issues/403#issuecomment-477520784 ABANDONED]|https://github.com/zplug/zplug|{{AUR|zplug}}}}
   
  +
=== Fish のようなシンタックスハイライト ===
シェルがログインシェルの場合、{{ic|/etc/profile}} そして {{ic|$ZDOTDIR/.zprofile}} からコマンドが読み込まれます。次に、シェルがインタラクティブの場合、{{ic|/etc/zsh/zshrc}} さらに {{ic|$ZDOTDIR/.zshrc}} からコマンドが読み込まれます。最後に、シェルがログインシェルの場合、{{ic|/etc/zsh/zlogin}} ついで {{ic|$ZDOTDIR/.zlogin}} が読み込まれます。
 
   
  +
[[Fish]] には強力なシェルシンタックスハイライトがあります。これを zsh で使うには、公式リポジトリから {{pkg|zsh-syntax-highlighting}} をインストールして以下を zshrc に追加します:
{{ic|man zsh}} の ''STARTUP/SHUTDOWN FILES'' セクションも参照してください。
 
  +
{{bc|
  +
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
  +
}}
  +
  +
=== "command not found" フック ===
  +
  +
[[pkgfile]] には、認識できないコマンドを入力したときに、自動的に公式リポジトリを検索する {{ic|command_not_found_handler}} 関数を提供する Zsh スクリプトファイルが含まれています。
  +
  +
有効にするには、スクリプトを [[source]] する必要があります。例:
  +
  +
{{hc|~/.zshrc|
  +
source /usr/share/doc/pkgfile/command-not-found.zsh
  +
}}
  +
  +
{{Note|pkgfile データベースの更新が必要な場合があります。[[pkgfile#Installation]] で詳細をご確認ください。}}
   
 
== アンインストール ==
 
== アンインストール ==
423行目: 513行目:
 
Zsh があなたに合わないと感じて Bash に戻りたいときは、Zsh パッケージを削除する前に必ず、まずデフォルトシェルを変更して下さい。
 
Zsh があなたに合わないと感じて Bash に戻りたいときは、Zsh パッケージを削除する前に必ず、まずデフォルトシェルを変更して下さい。
   
  +
{{Warning|以下の手順に従わないと、あらゆる種類の問題が発生します。ユーザーはシェルプログラムを使用できなくなります。}}
{{Warning|Failure to follow the below procedures will result in all kinds of problems: users will no longer have a working shell program.}}
 
   
 
ターミナルで次のコマンドを root で実行して下さい:
 
ターミナルで次のコマンドを root で実行して下さい:
433行目: 523行目:
 
以上を行わなかった場合、root で {{ic|/etc/passwd}} を編集することで Bash にデフォルトシェルを戻すことができます。
 
以上を行わなかった場合、root で {{ic|/etc/passwd}} を編集することで Bash にデフォルトシェルを戻すことができます。
   
  +
{{Warning|ユーザー情報を編集するときは、不適切な形式のエントリを防ぐため、 {{ic|vipw}} を使用することを '''強く''' お勧めします。}}
{{Warning|It is '''strongly''' recommended to use {{ic|vipw}} when editing user information as it prevents badly formatted entries.}}
 
   
 
例:
 
例:
444行目: 534行目:
 
== 参照 ==
 
== 参照 ==
   
  +
*[[Wikipedia:Zsh]]
  +
*[http://zsh.sourceforge.net/Intro/intro_toc.html An Introduction to the Z Shell]
 
*[http://zsh.sourceforge.net/Guide/zshguide.html ユーザーガイド]
 
*[http://zsh.sourceforge.net/Guide/zshguide.html ユーザーガイド]
 
*[http://zsh.sourceforge.net/Doc/Release/index-frame.html The Z Shell Manual] (different format available [http://zsh.sourceforge.net/Doc/ here])
 
*[http://zsh.sourceforge.net/Doc/Release/index-frame.html The Z Shell Manual] (different format available [http://zsh.sourceforge.net/Doc/ here])
 
*[http://zsh.sourceforge.net/FAQ/zshfaq01.html Zsh FAQ]
 
*[http://zsh.sourceforge.net/FAQ/zshfaq01.html Zsh FAQ]
*[http://grml.org/zsh/zsh-lovers.html zsh-lovers(1)] (公式リポジトリの {{pkg|zsh-lovers}} で利用できます)
 
 
*[http://zshwiki.org/home/ Zsh Wiki]
 
*[http://zshwiki.org/home/ Zsh Wiki]
  +
*{{man|1|zsh-lovers}} (公式リポジトリの {{pkg|zsh-lovers}} で利用できます)
 
*[https://wiki.gentoo.org/wiki/Zsh/HOWTO Gentoo Wiki: Zsh/HOWTO]
 
*[https://wiki.gentoo.org/wiki/Zsh/HOWTO Gentoo Wiki: Zsh/HOWTO]
 
*[http://www.bash2zsh.com/zsh_refcard/refcard.pdf Bash2Zsh Reference Card]
 
*[http://www.bash2zsh.com/zsh_refcard/refcard.pdf Bash2Zsh Reference Card]

2020年12月3日 (木) 17:43時点における版

Zsh は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルなシェルです。POSIX sh と互換性がありながら (デフォルトではありません、emulate sh を実行した時だけです)、タブ補完の改善や グロビングなどの利点があります。

Zsh FAQ には他にも Zsh をあなたのシェルとして使うべき理由が列挙されています。

インストール

インストールをする前に現在使っているシェルが何なのか知っておくとよいでしょう:

$ echo $SHELL

公式リポジトリにある zsh パッケージをインストールしてください。追加の補完定義を使いたい場合は、zsh-completions パッケージもインストールします。

初期設定

ターミナルで次のコマンドを実行して Zsh が正しくインストールされたか確認してください:

$ zsh

基本的な設定を説明する zsh-newuser-install が表示されるはずです。これをスキップしたい場合、q を押して下さい。表示されない場合は、次のコマンドで手動で呼び出すことができます:

$ autoload -Uz zsh-newuser-install
$ zsh-newuser-install -f
ノート: 仮想端末のサイズが少なくとも 72×15 であることを確認してください。そうでないと zsh-newuser-install は実行されません。

Zsh をデフォルトのシェルにする

シェルが /etc/shells に記載されていれば、chsh コマンドを使って root 権限なしでデフォルトシェルを変更することができます。公式リポジトリから Zsh をインストールしたのなら、既に /etc/shells にエントリが作られているはずです。

現在使っているユーザーのデフォルトシェルを変更するには:

$ chsh -s $(which zsh)
ノート: Zsh をデフォルトシェルとして起動するには、一度ログアウトしてからログインしなおす必要があります。

再ログイン後、Bash とは見た目が異なる Zsh のプロンプトが表示されていることに気づくでしょう。また、次のコマンドを実行することで Zsh が現在のシェルになっていることを確認できます:

$ echo $SHELL
ヒント: bash を置き換える場合、~/.bashrc から ~/.zshrc に (例: プロンプトとエイリアス) また ~/.bash_profile から ~/.zprofile に (例: X Window System を起動するコード) にコードを移動するとよいでしょう。

スタートアップ/シャットダウン ファイル

ヒント:
  • インタラクティブシェルとログインシェルの説明、およびスタートアップファイルに何を入れるかについては、A User's Guide to the Z-Shell を参照してください。
  • Zsh 構成ファイルには 標準パスの実装 を検討できます。
ノート:
  • $ZDOTDIR が設定されていない場合は、代わりに $HOME が使用されます。
  • オプション RCS がいずれかのファイルで設定されていない場合、そのファイルの後に構成ファイルは読み取りません。
  • オプション GLOBAL_RCS がいずれかのファイルで設定されていない場合、そのファイルの後にグローバル構成ファイル(/etc/zsh/*)は読み取りません。

ログイン時、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 と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。
ノート:
  • Arch の zsh パッケージで使われているパスは man ページで使われているデフォルトのパスとは異なっています。
  • $ZDOTDIR のデフォルトは $HOME です。
  • /etc/profile は Zsh のスタートアップファイルの標準リストに含まれていませんが、zsh パッケージに入っている /etc/zsh/zprofile から読み込まれます。/etc/profile$PATH 変数を設定すると ~/.zshenv に設定した $PATH 変数を全て上書きしてしまうので注意してください。これを防ぐには、/etc/zsh/zprofile をあなたの作ったファイルに置き換えるか、~/.zshrc から $PATH 変数を設定してください。

全ユーザー共通の設定ファイル

場合によっては 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 がホスト名をハッシュ化しないようにする必要があります。

警告: ハッシュ化を解除すると "Island-hopping" 攻撃 に無防備になります。そのことを前もって知った上で、次の行をコメントアウトするか値を no に設定してください:
/etc/ssh/ssh_config
#HashKnownHosts yes

これで ~/.ssh/known_hosts をどこか他のところに移動すれば ssh はハッシュ化されてないホスト名を使って新しいファイルを作成します (以前のホストは消失します)。詳細については、hashed-hosts に関する SSH の readme を見て下さい。

矢印キーのインターフェイスを使って自動補完するには、以下を追加して下さい:

~/.zshrc
zstyle ':completion:*' menu select
メニューを有効にするには、タブを二度押して下さい。

エイリアスでコマンドラインの自動補完を切り替えるには、以下を追加して下さい:

~/.zshrc
setopt completealiases

キーバインド

Zsh は readline を使っていません、代わりに自身のパワフルな zle を使っています。zle は /etc/inputrc~/.inputrc を読みません。 zle には emacs モードと vi モードがあります。デフォルトでは、$EDITOR 環境変数から emacs と vi どちらのキーをあなたが使いたいのか考えます。この変数が空の場合、デフォルトは emacs モードです。 bindkey -vbindkey -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
ノート: 特定のキーの組み合わせに対して適切なシーケンスを取得するには、 cat を起動するか、パラメーターなしで read を押します。 その後、端末に印刷する必要があります。 Ctrl+c を使用して両方を再び閉じることができます。

履歴検索

key 配列を設定し、ZLEがアプリケーションモードになっている事を確認して、以下の手順を使用してください。#キーバインド を参照してください。

履歴検索を有効にするには、以下の行を .zshrc ファイルに追加します:

~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search

[[ -n "${key[Up]}"   ]] && bindkey -- "${key[Up]}"   up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search

これにより、up または down キーを押すと、現在の行から現在のカーソル位置までに一致する過去のコマンドのみが表示されます。

Shift, Alt, Ctrl and Meta modifiers

xterm-compatible terminals can use extended key-definitions from user_caps(5). Those are combinations of Shift, Alt, Ctrl and Meta together with Up, Down, Left, Right, PageUp, PageDown, Home, End or Del.

For example, for Ctrl+Left to move to the beginning of the previous word and Ctrl+Right to move to the beginning of the next word:

~/.zshrc
key[Control-Left]="${terminfo[kLFT5]}"
key[Control-Right]="${terminfo[kRIT5]}"

[[ -n "${key[Control-Left]}"  ]] && bindkey -- "${key[Control-Left]}"  backward-word
[[ -n "${key[Control-Right]}" ]] && bindkey -- "${key[Control-Right]}" forward-word

プロンプト

Zsh offers the options of using a prompt theme or, for users who are dissatisfied with the themes (or want to expand their usefulness), the possibility to build a custom prompt.

Prompt themes

プロンプトテーマは、Zshで色付きのプロンプトを設定するためのすばやく簡単な方法です。それらの詳細については、zshcontrib(1) § PROMPT THEMES を参照してください。

テーマを使用するには、プロンプトテーマシステムが、.zshrc に自動でロードされるよう設定されていることを確認してください。自動ロードを行うには、以下の行を追加します。

~/.zshrc
autoload -Uz promptinit
promptinit

次のコマンドを実行することで利用可能なプロンプトを見ることができます:

$ prompt -l

例えば、walters プロンプトを使うには、次のように入力します:

$ prompt walters

全ての利用可能なテーマをプレビューするには次のコマンドを使って下さい:

$ prompt -p
プロンプトテーマの手動インストール

外部の設定管理ツールを使わずに、テーマを手動でインストールすることもできます。ローカルインストールの場合、最初にフォルダを使用し、それを fpath 配列に通過します。例:

$ mkdir ~/.zprompts
$ fpath=("$HOME/.zprompts" "$fpath[@]")

次に、このフォルダにテーマファイルのシンボリックリンクを作成します:

$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup

代わりに、テーマをグローバルにインストールする場合は、次のようにします:

# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup

これで、次のコマンドを使ってアクティブ化できるはずです:

$ prompt mytheme

すべてが機能する場合は、.zshrc をそれに応じて編集することができます。

プロンプトのカスタマイズ

上述のプロンプトに満足がいかない(もしくはプロンプトを拡張したい)場合、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 とは違ったふうに色を設定します。色を使うには .zshrcPROMPT= の前に 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
ノート: 太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、$fg['yellow'] は褐色や濃黄のようになりますが、$fg_bold['yellow'] はやや明るい普通の黄色のようになります。
サンプル

以下のようにすることで左右両側にプロンプトを表示できます:

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]

サンプル .zshrc ファイル

以下は .zshrc ファイルのリストです。自由に自分のファイルを追加してください:

ヒントとテクニック

履歴に同じ行が重複するのを避ける

履歴の重複する行を無視するには、以下を追加して下さい:

~/.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

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 を設定して 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> で訪問済みのフォルダに戻ります。ダッシュの後は自動補完が利用できます。自動補完メニューを使っている場合はとても役に立ちます。

ノート: zsh セッションを複数開いている場合、cd しようとしても、両方のセッションによって同一のファイルに書き込む衝突が発生するため機能しません。

ヘルプコマンド

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

アプリケーションの自動起動

Zsh はいつでも /etc/zsh/zshenv$ZDOTDIR/.zshenv を実行します。なのでこれらのファイルをあまり肥大化させないでください。

シェルがログインシェルの場合、/etc/profile そして $ZDOTDIR/.zprofile からコマンドが読み込まれます。次に、シェルがインタラクティブの場合、/etc/zsh/zshrc さらに $ZDOTDIR/.zshrc からコマンドが読み込まれます。最後に、シェルがログインシェルの場合、/etc/zsh/zlogin ついで $ZDOTDIR/.zlogin が読み込まれます。

man zshSTARTUP/SHUTDOWN FILES セクションも参照してください。

サードパーティ拡張

設定フレームワーク

  • oh-my-zsh は Zsh の設定を管理するための、人気のあるコミュニティドリブンなフレームワークです。便利な関数、ヘルパー、プラグイン、テーマが山ほどバンドルされています。
  • Prezto - Instantly Awesome Zsh (AUR の prezto-gitAUR でインストール可能) は Zsh の設定フレームワークです。デフォルトでリッチなコマンドラインインターフェース環境を構築するモジュール・エイリアス・関数・自動補完・プロンプトテーマが付いています。
  • Zim (AUR の zsh-zim-gitAUR でインストール可能) は、驚異的な速度とモジュラー拡張機能を備えたZsh構成フレームワークです。

プラグインマネージャー

  • Antibody — Antigen に似たパフォーマンス重視のプラグインマネージャー
https://github.com/getantibody/antibody || antibodyAUR
  • zinit (previously "zplugin") — 柔軟で高速な Zsh プラグインマネージャー
http://github.com/zdharma/zinit || zsh-zplugin-gitAUR
  • zr — Rust で書かれたシンプルで高速なプラグインマネージャー
https://github.com/jedahan/zr || zr-gitAUR
  • Antigen — oh-my-zsh と vundle に触発された Zsh のプラグインマネージャー ABANDONED
https://github.com/zsh-users/antigen || antigen-gitAUR
  • zgen — Zsh 用の軽量でシンプルなプラグインマネージャー ABANDONED
https://github.com/tarjoilija/zgen || zgen-gitAUR
  • zplug — Zsh 用の次世代プラグインマネージャー ABANDONED
https://github.com/zplug/zplug || zplugAUR

Fish のようなシンタックスハイライト

Fish には強力なシェルシンタックスハイライトがあります。これを zsh で使うには、公式リポジトリから zsh-syntax-highlighting をインストールして以下を zshrc に追加します:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

"command not found" フック

pkgfile には、認識できないコマンドを入力したときに、自動的に公式リポジトリを検索する command_not_found_handler 関数を提供する Zsh スクリプトファイルが含まれています。

有効にするには、スクリプトを source する必要があります。例:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
ノート: pkgfile データベースの更新が必要な場合があります。pkgfile#Installation で詳細をご確認ください。

アンインストール

Zsh があなたに合わないと感じて Bash に戻りたいときは、Zsh パッケージを削除する前に必ず、まずデフォルトシェルを変更して下さい。

警告: 以下の手順に従わないと、あらゆる種類の問題が発生します。ユーザーはシェルプログラムを使用できなくなります。

ターミナルで次のコマンドを root で実行して下さい:

# chsh -s /bin/bash user

Zsh を使っている全てのユーザーで実行して下さい。

これで安全に Zsh パッケージを削除することができます。

以上を行わなかった場合、root で /etc/passwd を編集することで Bash にデフォルトシェルを戻すことができます。

警告: ユーザー情報を編集するときは、不適切な形式のエントリを防ぐため、 vipw を使用することを 強く お勧めします。

例:

編集前:

username:x:1000:1000:Full Name,,,:/home/username:/bin/zsh

編集後:

username:x:1000:1000:Full Name,,,:/home/username:/bin/bash

参照