「Zsh」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎履歴検索: typo)
(同期)
 
(3人の利用者による、間の93版が非表示)
1行目: 1行目:
[[Category:コマンドシェル]]
+
[[Category:コマンドラインシェル]]
[[cs:Zsh]]
 
 
[[de:Zsh]]
 
[[de:Zsh]]
 
[[en:Zsh]]
 
[[en:Zsh]]
 
[[es:Zsh]]
 
[[es:Zsh]]
[[fr:Zsh]]
+
[[pt:Zsh]]
 
[[ru:Zsh]]
 
[[ru:Zsh]]
 
[[zh-hans:Zsh]]
 
[[zh-hans: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 グロビング]などの利点があります。
+
[https://www.zsh.org/ Zsh] は対話式シェルとしてもスクリプト言語のインタプリタとしても使えるパワフルな[[シェル]]です。POSIX sh と互換性がありながら (デフォルトではありません、{{ic|emulate sh}} を実行した時だけです)、[https://zsh.sourceforge.io/Guide/zshguide06.html タブ補完]の改善や [https://zsh.sourceforge.io/Doc/Release/Expansion.html グロビング]などの利点があります。
   
[http://zsh.sourceforge.net/FAQ/zshfaq01.html#l4 Zsh FAQ] には他にも Zsh をあなたのシェルとして使うべき理由が列挙されています。
+
[https://zsh.sourceforge.io/FAQ/zshfaq01.html#l4 Zsh FAQ] には他にも Zsh をあなたのシェルとして使うべき理由が列挙されています。
   
 
== インストール ==
 
== インストール ==
17行目: 16行目:
 
$ echo $SHELL
 
$ echo $SHELL
   
[[公式リポジトリ]]にある {{Pkg|zsh}} パッケージを[[pacman|インストール]]してください。追加の補完定義を使いたい場合は、{{pkg|zsh-completions}} パッケージもインストールします。
+
{{Pkg|zsh}} パッケージを[[インストール]]してください。追加の補完定義を使いたい場合は、{{pkg|zsh-completions}} パッケージもインストールします。
   
 
=== 初期設定 ===
 
=== 初期設定 ===
25行目: 24行目:
 
$ zsh
 
$ zsh
   
基本的な設定を説明する '''zsh-newuser-install''' が表示されるはずです。これをスキップしたい場合、{{ic|q}} を押して下さい。表示されない場合は、次のコマンドで手動で呼び出すことができます:
+
基本的な設定を説明する ''zsh-newuser-install'' が表示されるはずです。これをスキップしたい場合、{{ic|q}} を押して下さい。表示されない場合は、次のコマンドで手動で呼び出すことができます:
   
 
$ autoload -Uz zsh-newuser-install
 
$ autoload -Uz zsh-newuser-install
 
$ zsh-newuser-install -f
 
$ zsh-newuser-install -f
   
{{Note|仮想端末のサイズが少なくとも 72×15 であることを確認してください。そうでないと ''zsh-newuser-install'' は実行されません。}}
+
{{Note|あなたのターミナルのサイズが少なくとも 72×15 であることを確認してください。そうでないと ''zsh-newuser-install'' は実行されません。}}
   
 
=== Zsh をデフォルトのシェルにする ===
 
=== Zsh をデフォルトのシェルにする ===
   
シェル {{ic|/etc/shells}} に記載されていれば、{{ic|chsh}} コマンドを使って root 権限なしでデフォルトシェルを変更することができます。[[公式リポジトリ]]から Zshインストールしたのなら、既に {{ic|/etc/shells}} にエントリが作られているはずです
+
シェル {{ic|/usr/bin/zsh}} に変更しくださ。[[コマンドラインシェル#デフォルトシェルを変更する]] をください。
 
現在使っているユーザーのデフォルトシェルを変更するには:
 
 
$ chsh -s $(which zsh)
 
 
{{Note|Zsh をデフォルトシェルとして起動するには、一度ログアウトしてからログインしなおす必要があります。}}
 
 
再ログイン後、Bash とは見た目が異なる Zsh のプロンプトが表示されていることに気づくでしょう。また、次のコマンドを実行することで Zsh が現在のシェルになっていることを確認できます:
 
 
$ echo $SHELL
 
   
 
{{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 を起動するコード]]) にコードを移動するとよいでしょう。}}
50行目: 39行目:
 
== スタートアップ/シャットダウン ファイル ==
 
== スタートアップ/シャットダウン ファイル ==
   
  +
{{Tip|インタラクティブシェルとログインシェルの説明、およびスタートアップファイルに何を入れるかについては、[https://zsh.sourceforge.io/Guide/zshguide02.html A User's Guide to the Z-Shell] を参照してください。
{{Tip|
 
* See [http://zsh.sourceforge.net/Guide/zshguide02.html A User's Guide to the Z-Shell] for explanation on interactive and login shells, and what to put in your startup files.
 
* You could consider [[Command-line shell#Standardisation|implementing a standard path]] for your Zsh configuration files.
 
 
}}
 
}}
   
 
{{Note|
 
{{Note|
* If {{ic|$ZDOTDIR}} is not set, {{ic|$HOME}} is used instead.
+
* {{ic|$ZDOTDIR}} が設定されていない場合は、代わりに {{ic|$HOME}} が使用されます。
  +
* {{ic|RCS}} オプションが以下のファイルのどれかで unset された場合、そのファイル以降、設定ファイルは読み込まれません。
* If option {{ic|RCS}} is unset in any of the files, no configuration files will be read after that file.
 
* If option {{ic|GLOBAL_RCS}} is unset in any of the files, no global configuration files ({{ic|/etc/zsh/*}}) will be read after that file.
+
* {{ic|GLOBAL_RCS}} オプションが以下のファイルのどれかで unset された場合、そのファイル以降、グローバルな設定ファイル ({{ic|/etc/zsh/*}}) は読み込まれません。
 
}}
 
}}
   
ログイン時、Zsh は以下のファイルをの順番で読み込みます:
+
デフォルトで、Zsh は起動時に以下のファイルを以下の順番で実行します (存在しているものの実行されます)。
;{{ic|/etc/zsh/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|~/.zprofile}}:このファイルは一般的にユーザーのスクリプトを自動で実行するために使われます。
 
;{{ic|/etc/zsh/zshrc}}:グローバルな設定ファイルであり、インタラクティブシェルとして起動した場合に読み込まれます。
 
;{{ic|~/.zshrc}}:これは Zsh のメインの設定ファイルです。
 
;{{ic|/etc/zsh/zlogin}}:グローバルな設定ファイルであり、ログインシェルとして起動した場合に、初期化の最後に読み込まれます。
 
;{{ic|~/.zlogin}}:{{ic|/etc/zsh/zlogin}} と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。
 
;{{ic|/etc/zsh/zlogout}}:グローバルな設定ファイルであり、ログインシェルが終了するときに読み込まれます。
 
;{{ic|~/.zlogout}}:{{ic|/etc/zsh/zlogout}} と同じ設定ファイルですが、ユーザーごとの設定を記述するところが違います。
 
 
{{Note|
 
* Arch の {{Pkg|zsh}} パッケージで使われているパスは [[man ページ]]で使われているデフォルトのパスとは異なっています。
 
* {{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/zsh/zshenv}} すべてのユーザに対して[[環境変数]]を設定するために使用されます。このファイルには、出力を行うコマンドや、シェルが TTY に接続されていることを期待するコマンドを含めるべきではありません。このファイルが存在する場合、このファイルは '''''常に''''' 読み込まれます。この挙動を上書きすることはできません。
=== 全ユーザー共通の設定ファイル ===
 
  +
* {{ic|$ZDOTDIR/.zshenv}} ユーザの[[環境変数]]を設定するために使用されます。このファイルには、出力を行うコマンドや、シェルが TTY に接続されていることを期待するコマンドを含めるべきではありません。このファイルが存在する場合、このファイルは '''''常に''''' 読み込まれます。
  +
* {{ic|/etc/zsh/zprofile}} すべてのユーザに対して起動時にコマンドを実行するために使用されます。'''''ログインシェル'''''として起動した場合に、このファイルは読み込まれます。Arch Linux においては、このファイルには、{{ic|/etc/profile}} を source する [https://gitlab.archlinux.org/archlinux/packaging/packages/zsh/-/blob/main/zprofile 1行]がデフォルトで含まれていることを留意しておいてください。その行を削除したい場合は以下の警告を先に読んでください!
  +
** {{ic|/etc/profile}} POSIX sh 互換のシェルはすべて、このファイルをログイン時に source する必要があります。このファイルは {{ic|$PATH}} や他の環境変数を設定し、ログイン時にはアプリケーション固有 ({{ic|/etc/profile.d/*.sh}}) の設定を行います。
  +
* {{ic|$ZDOTDIR/.zprofile}} 起動時にユーザのコマンドを実行するために使用されます。'''''ログインシェル'''''として起動した場合に、このファイルは読み込まれます。通常、グラフィカルセッションを自動起動し、セッションの環境変数を設定するために使用されます。
  +
* {{ic|/etc/zsh/zshrc}} すべてのユーザに対して、インタラクティブシェルを設定したりコマンドを実行したりするために使用されます。'''''インタラクティブシェル'''''として起動した場合に、このファイルは読み込まれます。
  +
* {{ic|$ZDOTDIR/.zshrc}} ユーザのインタラクティブシェルを設定したり、コマンドを実行したりするために使用されます。'''''インタラクティブシェル'''''として起動した場合に、このファイルは読み込まれます。
  +
* {{ic|/etc/zsh/zlogin}} すべてのユーザに対して初期化処理の最後にコマンドを実行するために使用されます。'''''ログインシェル'''''として起動した場合に、このファイルは読み込まれます。
  +
* {{ic|$ZDOTDIR/.zlogin}} 初期化処理の最後にユーザのコマンドを実行するために使用されます。'''''ログインシェル'''''として起動した場合に、このファイルは読み込まれます。通常、コマンドラインユーティリティを自動起動するために使用されます。グラフィカルセッションを自動起動するために使用するべきではありません (この時点では、インタラクティブシェルにおいてのみ意味を持つ設定がセッションに含まれているかもしれないからです)。
  +
* {{ic|$ZDOTDIR/.zlogout}} '''''ログインシェル''''' が '''終了''' する時にコマンドを実行するために使用されます。
  +
* {{ic|/etc/zsh/zlogout}} '''''ログインシェル''''' が '''終了''' する時にすべてのユーザに対してコマンドを実行するために使用されます。
   
  +
[https://blog.flowblok.id.au/2013-02/shell-startup-scripts.html#implementation the graphic representation] を参照してください。
場合によっては Zsh ユーザー全てに設定を適用させたいときもあると思われます。zsh(1) によれば {{ic|/etc/zshrc}} などグローバルな設定ファイルはいくつか存在します。ただし、これは Arch では少し事情が異なっており、代わりに {{ic|/etc/zsh/}} を使うようにコンパイルされています [https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/zsh#n34]。
 
   
  +
{{Note|{{ic|$HOME/.profile}} は Zsh のスタートアップファイルの一部ではありません。さらに、Zsh によって '''source されません''' (Zsh が {{ic|sh}} か {{ic|ksh}} として実行され、ログインシェルとして起動しない限り)。sh や [[ksh]] との互換性モードに関する詳細は {{man|1|zsh|COMPATIBILITY}} を見てください。}}
従って、ユーザー共通の設定をしたいときは {{ic|/etc/zshrc}} ではなく {{ic|/etc/zsh/zshrc}} を使って下さい。これは {{ic|/etc/zsh/zshenv}}, {{ic|/etc/zsh/zlogin}}, {{ic|/etc/zsh/zlogout}} でも同じです。これらのファイルはデフォルトではインストールされないので、必要なときに作成してください。
 
   
  +
{{Warning|{{ic|/etc/zsh/zprofile}} 内にデフォルトで存在する [https://gitlab.archlinux.org/archlinux/packaging/packages/zsh/-/blob/main/zprofile 一行]を削除しないでください。さもないと、{{ic|/etc/profile.d/}} 内へスクリプトを提供するパッケージの整合性が破壊されてしまいます。}}
唯一の例外は {{ic|zprofile}} で、これは {{ic|/etc/profile}} を使います。
 
   
== ~/.zshrc の設定 ==
+
== Zsh の設定 ==
   
Zsh は何も設定しなくても使うことができますが、あなたが使いたい機能はほんど設定されていないでしょう。ただし Zsh で利用できるカスタム化険しく、Zsh 設定は困難をきわめ多くの時間を浪費するかもれません
+
Zsh は何も設定しなくても使うことができますが、ほとんどのユーザが使いたいと思うようには設定されていないことはほぼ確実。ただしZsh で利用できるカスタマイズ膨大で、Zsh 設定するは大変で時間を浪費する経験となるでょう。自動的に設定するには [[#サードパーティ拡張]] を見てください
   
 
=== シンプルな .zshrc ===
 
=== シンプルな .zshrc ===
   
サンプルの設定ファイルが含まれており、Zsh カスタマイズの方法の例だけなくデフォルトオプションのセット提供しています。この設定を使うには {{ic|.zshrc}} という名前ファイル保存してください。ログインしなおさなくても次を実行することで変更を適用できます:
+
下は設定ファイルのサンプルす。デフォルトオプションの適切なセットと共に、Zsh でカスタマイズ可能な方法の例を提供します。この設定を使うには{{ic|.zshrc}} という名前ファイル保存してください。
   
  +
{{Tip|ログアウトせずに変更を適用するには {{ic|source ~/.zshrc}} を実行してください。}}
$ source ~/.zshrc
 
   
以下はシンプルな {{ic|.zshrc}} です、基点としてはピッタリでしょう:
+
これはシンプルな {{ic|.zshrc}} です:
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
autoload -U compinit promptinit
+
autoload -Uz compinit promptinit
 
compinit
 
compinit
 
promptinit
 
promptinit
   
  +
# デフォルトのプロンプトを walters テーマに設定する
# This will set the default prompt to the walters theme
 
prompt walters}}
+
prompt walters
  +
}}
  +
  +
プロンプトテーマシステムに関する詳細は [[#プロンプトテーマ]] を見てください。
   
 
=== $PATH の設定 ===
 
=== $PATH の設定 ===
   
通常、PATH は {{ic|~/.zshenv}} で設定すべきですが、Arch Linux は {{ic|~/.zshenv}} を読み込ん後に {{ic|/etc/profile}} を読み込みます (全体の流れは[[#設定ファイル|設定ファイル]]を見てください)
+
Zsh は {{ic|PATH}} 変数を {{ic|path}} 配列に結びつけます。これにより、{{ic|path}} 配列変更するけで {{ic|PATH}} 変数操作することができます。詳細 [https://zsh.sourceforge.io/Guide/zshguide02.html#l24 A User's Guide to the Z-Shell] を見てください。
   
{{ic|$PATH}} の上書き防ぐために、{{ic|~/.zprofile}} で設定するようしてください:
+
{{ic|~/.local/bin/}} を {{ic|PATH}} に追加するに:
   
{{hc|1=~/.zprofile|2=
+
{{hc|~/.zshenv|2=
typeset -U path
+
typeset -U path PATH
path=(~/bin /other/things/in/path $path[@])}}
+
path=(~/.local/bin $path)
  +
export PATH
 
  +
}}
詳しくは [http://zsh.sourceforge.net/Guide/zshguide02.html#l24 Z-Shell のユーザーガイド] を参照してください。
 
   
 
=== コマンド補完 ===
 
=== コマンド補完 ===
   
Zsh の一番魅力的な機能はおそらく先進的な自動補完機能でしょう。少なくとも{{ic|.zshrc}} で自動補完を有効と思うはずです。自動補完を有効にするには、以下を追加してください:
+
Zsh の一番魅力的な機能はおそらく先進的な自動補完機能でしょう。少なくとも {{ic|.zshrc}} で自動補完を有効てください。自動補完を有効にするには、以下を {{ic|~/.zshrc}} に追加してください:
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
autoload -U compinit
+
autoload -Uz compinit
compinit}}
+
compinit
 
この設定は ssh/scp/sftp のホスト名の補完も含んでいますが、この機能を動かすには {{ic|~/.ssh/known_hosts}} で ssh がホスト名をハッシュ化しないようにする必要があります。
 
{{Warning|ハッシュ化を解除すると [http://blog.rootshell.be/2010/11/03/bruteforcing-ssh-known_hosts-files/ "Island-hopping" 攻撃] に無防備になります。そのことを前もって知った上で、次の行をコメントアウトするか値を {{ıc|no}} に設定してください:
 
{{hc|/etc/ssh/ssh_config|
 
#HashKnownHosts yes}}
 
これで {{ic|~/.ssh/known_hosts}} をどこか他のところに移動すれば ssh はハッシュ化されてないホスト名を使って新しいファイルを作成します (以前のホストは消失します)。詳細については、[http://nms.lcs.mit.edu/projects/ssh/README.hashed-hosts hashed-hosts] に関する SSH の readme を見て下さい。
 
 
}}
 
}}
   
  +
上記の設定には ssh/scp/sftp ホスト名の補完が含まれていますが、この機能を動作させるためにはユーザは ssh のホスト名ハッシュ化 (つまり、ssh クライアントの設定の {{ic|HashKnownHosts}} オプション) を有効化してはなりません。
矢印キーのインターフェイスを使って自動補完するには、以下を追加して下さい:
 
  +
  +
矢印キーを使うインターフェイスで自動補完を行うには、以下を追加してください:
  +
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
zstyle ':completion:*' menu select}}
+
zstyle ':completion:*' menu select
  +
}}
:''メニューを有効にするには、タブを二度押して下さい。''
 
  +
  +
メニューをアクティブにするには、{{ic|Tab}} を2回押してください。
  +
  +
特権が与えられたコマンドで特権環境の自動補完を有効化するには (例えば、[[sudo]] で始まるコマンドを補完する場合、補完スクリプトは sudo の補完もしようと試みます)、以下を追加してください:
   
エイリアスでコマンドラインの自動補完を切り替えるには、以下を追加して下さい:
 
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
  +
zstyle ':completion::complete:*' gain-privileges 1
setopt completealiases}}
 
  +
}}
  +
  +
{{Warning|これにより、Zsh の補完スクリプトが sudo 特権でコマンドを実行できてしまいます。信頼できない補完スクリプトを使用する場合はこれを有効化すべきではありません。}}
  +
  +
{{Note|この特殊な種類の文脈依存の補完は、少数のコマンドでしか利用できません。}}
  +
  +
==== カスタムの補完 ====
  +
  +
カスタムの補完を自分で作ることもできます。詳細は {{man|1|zshcompsys}} man ページを参照してください。
  +
  +
公式のドキュメントは難解かもしれません。簡単なスタートポイントとして、よりシンプルな [https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org zsh-completion-howto] チュートリアルもあります。
   
 
=== キーバインド ===
 
=== キーバインド ===
   
Zsh は readline を使っていません代わりに自身のパワフルな zle を使っています。zle は {{ic|/etc/inputrc}} {{ic|~/.inputrc}} 読みません。
+
Zsh は [[readline]] を使用しません代わりに、よりパワフルな独自の Zsh Line Editor (ZLE) を使用します。ZLE は {{ic|/etc/inputrc}} {{ic|~/.inputrc}} のどちらもみ込みません。ZLE 設定のイントロダクションは [https://sgeb.io/posts/2014/04/zsh-zle-custom-widgets/ A closer look at the zsh line editor and creating custom widgets] を読んでください
zle には [[emacs]] モードと [[vi]] モードがあります。デフォルトでは、{{ic|$EDITOR}} 環境変数から emacs と vi どちらのキーをあなたが使いたいのか考えます。この変数が空の場合、デフォルトは emacs モードです。 {{ic|bindkey -v}} や {{ic|bindkey -e}} でモードを変更することが可能です。
 
   
  +
ZLE には [[Emacs]] モードと [[vi]] モードがあります。{{ic|VISUAL}} か {{ic|EDITOR}} のどちらか一方の[[環境変数]]に {{ic|vi}} という文字列が含まれている場合、vi モードが使用されます。それ以外の場合、Emacs モードをデフォルトで使用します。{{ic|bindkey -e}} (Emacs モード) や {{ic|bindkey -v}} (vi モード) でモードを明示的に設定することもできます。デフォルトでは、vi モードでの Esc キーを押した時の遅延は 0.4 秒ですが、{{ic|1=export KEYTIMEOUT=5}} でより短く (0.05 秒) することができます。
特殊なキーを動作させるには:
 
{{hc|~/.zshrc|2=
 
# create a zkbd compatible hash;
 
# to add other keys to this hash, see: man 5 terminfo
 
typeset -A key
 
   
  +
キーバインドは、キープレスに対応するエスケープシーケンスを ZLE ウィジェットにマッピングすることにより割り当てます。利用可能なウィジェットは {{man|1|zshzle|STANDARD WIDGETS}} と {{man|1|zshcontrib|ZLE FUNCTIONS}} にリストアップされています (アクションとデフォルトのキーバインドの説明付き)。
key[Home]=${terminfo[khome]}
 
  +
  +
Zsh でキーバインドを設定する方法として推奨されるのは、{{man|5|terminfo}} の文字列ケーパビリティを使用することです。例えば [https://web.archive.org/web/20180704181216/http://zshwiki.org/home/zle/bindkeys][https://www.zsh.org/mla/users/2010/msg00065.html]:
  +
  +
{{hc|~/.zshrc|2=
  +
# zkbd と互換性のあるハッシュテーブルを作成し、
  +
# 他のキーをこのハッシュテーブルに追加する (man 5 terminfo を参照)
  +
typeset -g -A key
   
key[End]=${terminfo[kend]}
+
key[Home]="${terminfo[khome]}"
key[Insert]=${terminfo[kich1]}
+
key[End]="${terminfo[kend]}"
key[Delete]=${terminfo[kdch1]}
+
key[Insert]="${terminfo[kich1]}"
key[Up]=${terminfo[kcuu1]}
+
key[Backspace]="${terminfo[kbs]}"
key[Down]=${terminfo[kcud1]}
+
key[Delete]="${terminfo[kdch1]}"
key[Left]=${terminfo[kcub1]}
+
key[Up]="${terminfo[kcuu1]}"
key[Right]=${terminfo[kcuf1]}
+
key[Down]="${terminfo[kcud1]}"
key[PageUp]=${terminfo[kpp]}
+
key[Left]="${terminfo[kcub1]}"
key[PageDown]=${terminfo[knp]}
+
key[Right]="${terminfo[kcuf1]}"
  +
key[PageUp]="${terminfo[kpp]}"
  +
key[PageDown]="${terminfo[knp]}"
  +
key[Shift-Tab]="${terminfo[kcbt]}"
   
  +
# 適宜キーを設定する
# setup key accordingly
 
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
+
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line
+
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
[[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode
+
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
[[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char
+
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
[[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-history
+
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-history
+
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
[[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char
+
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
[[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char
+
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" beginning-of-buffer-or-history
+
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" end-of-buffer-or-history
+
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
  +
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
  +
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
   
  +
# 最後に、zle がアクティブのときにターミナルがアプリケーションモードになるようにする。
# Finally, make sure the terminal is in application mode, when zle is
 
  +
# そのときにだけ、$terminfo の値が有効になる。
# active. Only then are the values from $terminfo valid.
 
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
+
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
  +
autoload -Uz add-zle-hook-widget
function zle-line-init () {
 
  +
function zle_application_mode_start { echoti smkx }
printf '%s' "${terminfo[smkx]}"
 
  +
function zle_application_mode_stop { echoti rmkx }
}
 
  +
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
function zle-line-finish () {
 
  +
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
printf '%s' "${terminfo[rmkx]}"
 
}
 
zle -N zle-line-init
 
zle -N zle-line-finish
 
 
fi
 
fi
 
}}
 
}}
 
{{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}}.}}
 
   
 
==== 履歴検索 ====
 
==== 履歴検索 ====
   
{{ic|key}} 配列を設定し、ZLEがアプリケーションモードってい事を確認して、以下の手順を使用してください。[[#キーバインド]] を参照してください。
+
以下の手順を使うには、{{ic|key}} 配列を設定し、ZLE がアプリケーションモードなるようにする必要があります。[[#キーバインド]] をてください。
   
履歴検索を有効するには、以下の行を {{ic|.zshrc}} ファイルに追加します:
+
履歴検索を有効するには、以下を {{ic|.zshrc}} ファイルに追加してください:
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
210行目: 206行目:
 
}}
 
}}
   
これにより、{{ic|up}} または {{ic|down}} キーを押と、現在の行から現在のカーソル位置までに一致する過去のコマンドのみが表示されます。
+
これにより、{{ic|Up}} {{ic|Down}} を押したきに、現在の行のカーソル位置までにマッチする過去のコマンドだけが表示されます。
   
==== Shift, Alt, Ctrl and Meta modifiers ====
+
==== 修飾キー ShiftAltCtrlMeta ====
   
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}}.
+
xterm 互換端末は {{man|5|user_caps}} からの拡張キー定義を使うことができます。キー定義は、{{ic|Shift}}{{ic|Alt}}{{ic|Ctrl}}{{ic|Meta}} と、{{ic|Up}}{{ic|Down}}{{ic|Left}}{{ic|Right}}{{ic|PageUp}}{{ic|PageDown}}{{ic|Home}}{{ic|End}}{{ic|Del}} のどれかを組み合わせたものです。修飾キーとキーの組み合わせに推奨される名前の一覧については、[https://sourceforge.net/p/zsh/code/ci/master/tree/Functions/Misc/zkbd zkbd のソース] を参照してください。
   
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:
+
たとえば、 {{ic|Ctrl+Left}} で前の単語の先頭に移動し、{{ic|Ctrl+Right}} で次の単語の先頭に移動させるには:
   
 
{{hc|~/.zshrc|2=
 
{{hc|~/.zshrc|2=
228行目: 224行目:
 
=== プロンプト ===
 
=== プロンプト ===
   
  +
Zsh は2つの選択肢を提供します: プロンプトテーマを使用するか、テーマに不満がある (または、テーマの使いやすさを自分で拡張したい) ユーザはカスタムのプロンプトを構築できます。
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で色付きのプロンプトを設定するためのすばやく簡単な方法です。それらの詳細については{{man|1|zshcontrib|PROMPT THEMES}} を参照してください。
+
プロンプトテーマは、Zsh で色付きのプロンプトを設定するための手っ取り早く簡単な方法です。プロンプトテーマや、プロンプトテーマを自分で記述する方法については {{man|1|zshcontrib|PROMPT THEMES}} を参照してください。
   
テーマを使用するには、プロンプトテーマシステムが、{{ic|.zshrc}} に自動でロードされるよう設定されていることを確認してください。自動ロードを行うには、以下の行を追加します
+
テーマを使用するには、プロンプトテーマシステムが自動でロードされるように {{ic|.zshrc}} で設定されていることを確認してください。自動ロードを行うには、以下の行を追加します:
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
241行目: 237行目:
 
}}
 
}}
   
のコマンドを実行することで利用可能なプロンプトを見ることができます:
+
以下のコマンドで利用可能なプロンプトテーマリストアップできます:
   
 
$ prompt -l
 
$ prompt -l
   
例えば、walters プロンプトを使うには、次のように入力します:
+
例えば、{{ic|walters}} テーマを使うには:
   
 
$ prompt walters
 
$ prompt walters
   
全ての利用可能なテーマをプレビューするには次のコマンドを使って下さい:
+
利用可能なテーマをすべてプレビューするには:
   
 
$ prompt -p
 
$ prompt -p
   
===== プロンプトテーマ手動インストール =====
+
===== プロンプトテーマ手動インストールする =====
   
外部の設定管理ツールを使わずに、テーマを手動でインストールすることもできます。ローカルインストール場合、最初にフォルダを使用し、そを {{ic|fpath}} 配列に通過ます。例:
+
外部の設定管理ツールを使わずに、テーマを手動でインストールすることもできます。ローカルインストールする場合、まずフォルダを作成し、そのフォルダのパスを {{ic|fpath}} 配列に追加てください。例えば:
   
 
$ mkdir ~/.zprompts
 
$ mkdir ~/.zprompts
 
$ fpath=("$HOME/.zprompts" "$fpath[@]")
 
$ fpath=("$HOME/.zprompts" "$fpath[@]")
   
次に、このフォルダにテーマファイルのシンボリックリンクを作成します:
+
次に、このフォルダにテーマファイルのシンボリックリンクを作成します:
   
 
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
 
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
   
代わりにテーマをグローバルにインストールする場合は、次のようにします:
+
代わりにテーマをグローバルにインストールする場合は、次のようにします:
   
 
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
 
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
272行目: 268行目:
 
$ prompt mytheme
 
$ prompt mytheme
   
すべてが機能する場合は、{{ic|.zshrc}} をそれに応じて編集することができます。
+
すべてが機能する場合は、{{ic|.zshrc}} を適宜編集することができます。
  +
  +
===== テーマごとにファイルを分けずにプロンプトテーマを追加する =====
  +
  +
プロンプトテーマは、テーマのファイルを使って追加するだけでなく、ある1つのファイル (例えば {{ic|.zshrc}}) 内からテーマを追加することもできます。例えば:
  +
  +
{{hc|~/.zshrc|2=
  +
# promptinit をロードする
  +
autoload -Uz promptinit && promptinit
  +
  +
# テーマを定義する
  +
prompt_mytheme_setup() {
  +
PS1="%~%# "
  +
}
  +
  +
# promptsys にそのテーマを追加する
  +
prompt_themes+=( mytheme )
  +
  +
# テーマをロードする
  +
prompt mytheme
  +
}}
   
 
==== プロンプトのカスタマイズ ====
 
==== プロンプトのカスタマイズ ====
   
上述のプロンプトに満足がいかない(もしくはプロンプトを拡張したい)場合、Zsh にはカスタムプロンプトを作る機能が備わっていま。全てのシェルに共通な左側だけのプロンプトに加え、Zsh はを使うプロンプトサポートしています。{{ic|1=PROMPT=}} と以下の変数を使うことでプロンプトをカスタマイズできます:
+
てのシェルで一般的な主要な左側のプロンプト {{ic|PS1}} ({{ic|PROMPT}}、{{ic|prompt}}) に加え、Zsh は右側プロンプト {{ic|RPS1}} ({{ic|RPROMPT}}) もサポートしています。これら2つの変数は、好きな値にカスタできます
   
  +
他の特殊な目的のためのプロンプト ({{ic|PS2}} ({{ic|PROMPT2}})、{{ic|PS3}} ({{ic|PROMPT3}})、{{ic|PS4}} ({{ic|PROMPT4}})、{{ic|RPS1}} ({{ic|RPROMPT}})、{{ic|RPS2}} ({{ic|RPROMPT2}})、{{ic|SPROMPT}} など) は {{man|1|zshparam|PARAMETERS USED BY THE SHELL}} で説明されています。
===== プロンプト変数 =====
 
  +
  +
すべてのプロンプトは、プロンプトエスケープでカスタマイズできます (例えば、{{ic|%n}} はユーザ名になります)。利用可能なプロンプトエスケープは {{man|1|zshmisc|EXPANSION OF PROMPT SEQUENCES}} でリストアップされています。
  +
  +
===== 色 =====
  +
  +
Zsh は、[[Bash/プロンプトのカスタマイズ|Bash]] とは異なる方法で色を設定します。ANSI エスケープシーケンスや、{{man|5|terminfo}} のターミナルケーパビリティを多用する必要はありません。Zsh は、前景色、背景色、他の視覚エフェクトを設定するための便利なプロンプトエスケープを提供します。エスケープのリストや説明は {{man|1|zshmisc|Visual effects}} を見てください。
  +
  +
[https://zsh.sourceforge.io/FAQ/zshfaq03.html#l42 色]を指定する方法は3つあります: 10進数の整数、8つの広くサポートされている色の名前、# のあとに16進数の RGB トリプレット。詳細は {{man|1|zshzle|CHARACTER HIGHLIGHTING}} 内の fg=colour の説明を見てください。
  +
  +
ほとんどのターミナルは以下の色を名前でサポートしています:
   
 
{| class="wikitable"
 
{| class="wikitable"
! scope="col" width="10%"| コマンド || !scope="col" width="60%"|説明 || !scope="col" width="30%"|コメント
 
|-
 
! colspan="3" | 一般
 
|-
 
|{{ic|%n}} || ユーザー名
 
|-
 
|{{ic|%m}} || コンピュータのホスト名 (ドットの前の部分まで)
 
|-
 
|{{ic|%M}} || コンピュータのホスト名
 
|-
 
|{{ic|%l}} || 現在の tty
 
|-
 
|{{ic|%?}} || 最後に実行したアプリケーションのリターンコード
 
|-
 
|{{ic|%#}} || ユーザー特権によるプロンプト (root なら {{ic|#}} その他なら {{ic|%}})
 
|-
 
! colspan="3" | 時間
 
|-
 
| {{ic|%T}}|| システム時刻 (HH:MM)
 
|-
 
| {{ic|%*}}|| システム時刻 (HH:MM:SS)
 
|-
 
| {{ic|%D}}|| システム日付 (YY-MM-DD)
 
|-
 
! colspan="3" | ディレクトリ
 
|-
 
| {{ic|%d}} || カレントディレクトリ。
 
| rowspan="2" | 数字を前に付けることでパスの一部だけを表示することが可能です。例えば {{ic|%1d}} と入力した場合、{{ic|/usr/bin}} にいるときは {{ic|bin}} と表示されます。負の値も使えます: {{ic|%-1d}} は上の例だと {{ic|/}} と表示されます。
 
 
|-
 
|-
  +
! 名前 !! 番号
| {{ic|%~}}|| カレントディレクトリ。{{ic|$HOME}} やそのサブディレクトリにいる場合、{{ic|$HOME}} の部分は {{ic|~}} に置き換えられます。
 
|-
 
! colspan="3" | 整形
 
 
|-
 
|-
| {{ic|%U [...] %u}} || 下線表示の始まりと終わり
+
| {{ic|black}} || {{ic|0}}
 
|-
 
|-
| {{ic|%B [...] %b}} || 太字表示の始まりと終わり
+
| {{ic|red}} || {{ic|1}}
 
|-
 
|-
  +
| {{ic|green}} || {{ic|2}}
| {{ic|<nowiki>%{ [...] %}</nowiki>}} || 表示されない領域。色の設定をするときに使います。このタグによって Zsh はタグの中にあるものを全て無視します。使用しないとプロンプトの縁やインデントに妙な影響が出ることがあります。
 
 
|-
 
|-
  +
| {{ic|yellow}} || {{ic|3}}
! colspan="3" | カラー
 
 
|-
 
|-
  +
| {{ic|blue}} || {{ic|4}}
| {{ic|$fg[color]}}||文字色を設定します (red, green, blue など - 太字デフォルト)。
 
| rowspan="4" | Zsh は [[Bash カラープロンプト|Bash]] とは違ったふうに色を設定します。色を使うには {{ic|.zshrc}} で {{ic|1=PROMPT=}} の前に {{ic|autoload -U colors && colors}} を追加してください。通常、カーソルが動かないように色の設定は {{ic|%{ [...] %} }} の中に記述します。
 
 
|-
 
|-
  +
| {{ic|magenta}} || {{ic|5}}
| {{ic|$fg_no_bold[color]}}|| 太字でない文字色を設定します。
 
 
|-
 
|-
  +
| {{ic|cyan}} || {{ic|6}}
| {{ic|$fg_bold[color]}}|| 太字の文字色を設定します。
 
 
|-
 
|-
  +
| {{ic|white}} || {{ic|7}}
| {{ic|$reset_color}}|| 文字色をデフォルトの色に戻します。
 
 
|}
 
|}
   
  +
xterm 256 color と互換性のあるターミナルエミュレータの色番号 0 から 255 は、[https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg xterm-256color チャート]で見られます。
{| class="wikitable"
 
|-
 
! colspan="2" | 利用できるカラー
 
|-
 
| {{ic|black}} または {{ic|0}} || {{ic|red}} または {{ic|1}}
 
|-
 
| {{ic|green}} または {{ic|2}} || {{ic|yellow}} または {{ic|3}}
 
|-
 
| {{ic|blue}} または {{ic|4}} || {{ic|magenta}} または {{ic|5}}
 
|-
 
| {{ic|cyan}} または {{ic|6}} || {{ic|white}} または {{ic|7}}
 
|}
 
   
  +
TERM 環境変数が正しく設定されていれば、ターミナルのサポートする色の最大数は、{{man|5|terminfo}} データベースから {{ic|echoti colors}} を使って確認することができます。[https://github.com/termstandard/colors/blob/master/README.md 24-bit カラー]の場合は、{{ic|print $COLORTERM}} を使って COLORTERM 環境変数も確認してください。{{ic|24bit}} か {{ic|truecolor}} を返した場合、たとえ terminfo がより少ない数値を表示したとしても、あなたのターミナルは 16777216 (2<sup>24</sup>) 色をサポートしています。
{{Note|太字の文字色は通常の文字色と必ずしも同じ色になるわけではありません。例えば、{{ic|$fg['yellow']}} は褐色や濃黄のようになりますが、{{ic|$fg_bold['yellow']}} はやや明るい普通の黄色のようになります。}}
 
   
  +
{{Note|
===== サンプル =====
 
  +
* 0 から 15 の色は、ターミナルエミュレータやカラースキームごとに異なる場合があります。
  +
* 多くのターミナルエミュレータは、太文字を明るい色で表示します。
  +
}}
   
  +
{{Tip|
以下のようにすることで左右両側にプロンプトを表示できます:
 
  +
* プロンプトのエスケープは {{ic|print -P ''"prompt escapes"''}} コマンドでテストできます。例えば、{{bc|$ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'}}
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#"
 
  +
* 24 ビットカラーを使用する場合、24 ビットカラーをサポートしていないターミナルでは {{ic|zsh/nearcolor}} モジュールをロードする必要があるかもしれません。例えば: {{bc|<nowiki>[[ "$COLORTERM" == (24bit|truecolor) || "${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor</nowiki>}} {{ic|zsh/nearcolor}} モジュールに関する詳細は {{man|1|zshmodules|THE ZSH/NEARCOLOR MODULE}} を見てください。
RPROMPT="[%{$fg_no_bold[yellow]%}%?%{$reset_color%}]"
 
  +
}}
   
  +
===== 例 =====
次のようになります (色は省略):
 
username@host ~ % [0]
 
   
  +
これは、シンプルな色無しのプロンプトの例です:
=== サンプル .zshrc ファイル ===
 
   
  +
PROMPT='%n@%m %~ %# '
以下は {{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
 
  +
<div class="mw-no-invert" style="font-family: monospace, monospace; white-space: pre; padding: 1em; background-color: #000; border: 1px solid #bcd; color: #c0c0c0; overflow:hidden;"><span style="float:left;">username@host ~ % </span></div>
* https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - 複数の機能を有効にした zshrc、コメントを見て下さい。特徴: ユーザーが電源オフ・再起動・ハイバネートをすることを確認する関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。
 
  +
  +
これは、色付きの左右両方のプロンプトの例です:
  +
  +
PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# '
  +
RPROMPT='[%F{yellow}%?%f]'
  +
  +
以下のように出力されます:
  +
  +
<div class="mw-no-invert" style="font-family: monospace, monospace; white-space: pre; padding: 1em; background-color: #000; border: 1px solid #bcd; color: #c0c0c0; overflow: hidden;"><span style="float:left;"><span style="color: #008000;">username</span>@<span style="color: #800080;">host</span> <span style="color: #0000ff;">~</span> % </span><span style="float:right;">[<span style="color: #808000;">0</span>]</span></div>
  +
  +
16-255 の範囲の色は、欲しい色に割り当てた 0 から 255 までの数値を使うことで使用できます。また、24 ビットトゥルーカラーは16進数のカラーコードを使うことで使用できます:
  +
  +
PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# '
  +
RPROMPT='[%F{3}%?%f]'
  +
  +
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# '
  +
RPROMPT='[%F{#0000ff}%?%f]'
  +
  +
=== サンプルの .zshrc ファイル ===
  +
  +
* [https://www.archlinux.jp/download/ 月次 ISO リリース] (デフォルトで Zsh を使用します) と同じセットアップにするには、{{Pkg|grml-zsh-config}} をインストールしてください。これには、[https://grml.org/zsh/ grml] の多くの調整と高度な最適化が含まれています。
  +
* https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc - ベーシックなセットアップ。動的なプロンプトとウィンドウのタイトル/hardinfo。
  +
* https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc - 複数の機能を持つ zshrc。コメントをチェックしてください。特出すべき機能: ユーザーが電源オフ・再起動・ハイバネートをすることを尋ねる関数、プロンプトの GIT サポート (vcsinfo を使わずに実現)、メニューの付いたタブ補完、実行中のコマンドをウィンドウのタイトルバーに表示など。
  +
  +
さらに見たい場合は [[ドットファイル#ユーザーリポジトリ]] を見てください。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
   
=== 履歴同じ行が重複するの避ける ===
+
=== ログイン時 X 自動起動 ===
  +
  +
[[xinit#ログイン時に X を自動起動]]を参照してください。
  +
  +
=== プログラムが異常終了した後、端末の設定を復元する ===
  +
  +
多くのプログラムはターミナルの状態を変更し、異常終了したときにターミナルの設定を復元しないことがあります (例えば、クラッシュしたときや、SIGINT を受け取ったとき)。
  +
  +
通常、これは {{man|1|reset}} を実行することで解決できます:
  +
  +
$ reset
  +
  +
以下のセクションでは、手動でターミナルをリセットする手間を省く方法について説明します。
  +
  +
==== ttyctl コマンド ====
  +
  +
[https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html#index-tty_002c-freezing ttyctl] コマンドを使ってターミナルを "freeze/unfreeze" することができます。起動時にインタラクティブシェルを freeze させるには、以下を使用してください:
   
履歴の重複する行を無視するには、以下を追加して下さい:
 
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
  +
ttyctl -f
setopt HIST_IGNORE_DUPS}}
 
  +
}}
   
  +
==== エスケープシーケンスで端末をリセットする ====
既に作成された重複を履歴から取り除くには、次を実行:
 
$ sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
 
   
  +
[https://www.in-ulm.de/~mascheck/various/alternate_charset/ 代替の線画文字セット]は、ttyctl が防ぐことができない方法でターミナルを台無しにしてしまうことがあります。
=== ttyctl コマンド ===
 
   
  +
シンプルな解決法は、ターミナルをリセットするエスケープシーケンスを {{ic|precmd}} フック関数から出力することです。そうすれば、プロンプトが描画される前に毎回、そのエスケープシーケンスが出力されます。例えば、[https://www.in-ulm.de/~mascheck/various/alternate_charset/#solution エスケープシーケンス] {{ic|\e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8}} を使うと:
[http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#index-tty_002c-freezing] には Zsh の {{ic|ttyctl}} コマンドの説明があります。{{ic|ttyctl}} を使うことでターミナルを "freeze/unfreeze" することができます。ターミナルの状態を変更するプログラムは多数存在しますが、終了時にターミナルの設定を元に戻さないことがあります。手動でターミナルをリセットしなくてもいいようにするには、以下を使います:
 
  +
  +
{{hc|~/.zshrc|2=
  +
  +
autoload -Uz add-zsh-hook
  +
  +
function reset_broken_terminal () {
  +
printf '%b' '\e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8'
  +
}
  +
  +
add-zsh-hook -Uz precmd reset_broken_terminal
  +
}}
  +
  +
うまく行くか試すには、以下を実行してください:
  +
  +
$ print '\e(0\e)B'
  +
  +
=== 最近のディレクトリを記憶させる ===
  +
  +
==== Dirstack ====
  +
  +
Zsh は、最後に訪れたフォルダのうち DIRSTACKSIZE 個を記憶するように設定できます。この機能を活用すれば、それらのフォルダへ非常に素早く ''cd'' することができます。設定ファイルにいくつかの行を追加する必要があります:
  +
  +
{{hc|~/.zshrc|<nowiki>
  +
autoload -Uz add-zsh-hook
  +
  +
DIRSTACKFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/dirs"
  +
if [[ -f "$DIRSTACKFILE" ]] && (( ${#dirstack} == 0 )); then
  +
dirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")
  +
[[ -d "${dirstack[1]}" ]] && cd -- "${dirstack[1]}"
  +
fi
  +
chpwd_dirstack() {
  +
print -l -- "$PWD" "${(u)dirstack[@]}" > "$DIRSTACKFILE"
  +
}
  +
add-zsh-hook -Uz chpwd chpwd_dirstack
  +
  +
DIRSTACKSIZE='20'
  +
  +
setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME
  +
  +
## 重複するエントリを削除する
  +
setopt PUSHD_IGNORE_DUPS
  +
  +
## +/- 演算子をもとに戻す。
  +
setopt PUSHD_MINUS
  +
</nowiki>}}
  +
  +
これで、以下のコマンドを使えば dirstack を出力できます。
  +
Now use
  +
  +
$ dirs -v
  +
  +
訪れたフォルダに戻るには {{ic|cd -<NUM>}} を使ってください。ダッシュ記号の後でオートコンプリートを使ってください。オートコンプリートメニューを使う場合に便利です。
  +
  +
{{Note|2つ以上の ''zsh'' セッションを開いていて {{ic|cd}} をしようとした場合、両方のセッションが同じファイルに書き込むことで競合が発生するため、これは動作しません。}}
  +
  +
==== cdr ====
  +
  +
cdr により、自動的に管理されるリストを使って現在の作業ディレクトリから以前の作業ディレクトリに移動することができます。cdr は、現在のセッションでセッション間および (デフォルトで) ターミナルエミュレータ間で管理されるファイルにすべてのエントリを保存します。
  +
  +
セットアップの手順は {{man|1|zshcontrib|REMEMBERING RECENT DIRECTORIES}} を見てください。
  +
  +
==== zoxide ====
  +
  +
{{Pkg|zoxide}} は、よりスマートな ''cd'' コマンドで、数個のキーストロークで好きな場所に移動できます。zoxide は、頻繁に使用されるディレクトリを記憶し、スコアリングメカニズムを使って、あなたが行きたい場所を推測します。
  +
  +
=== ヘルプコマンド ===
  +
  +
[[Bash]] とは違い、Zsh は組み込みの {{ic|help}} コマンドを有効化しておらず、代わりに {{ic|run-help}} を提供しています。デフォルトでは、{{ic|run-help}} は {{ic|man}} のエイリアスとなっています。コマンドの前に {{ic|run-help}} と付けることで実行できますし、または今タイプしたコマンドに対してキーボードショートカット {{ic|Alt+h}} か {{ic|Esc}} {{ic|h}} を入力することでも実行できます。
  +
  +
デフォルトでは [[man]] のエイリアスとなっているので、外部コマンドに対してしか動作しません。シェルの組み込みコマンドやシェルの他の機能でも動作するようにするには、{{ic|run-help}} 関数を使う必要があります。{{ic|run-help}} や補助関数については {{man|1|zshcontrib}} を見てください。
  +
  +
まず、{{ic|run-help}} 関数をロードし、その次に既存の {{ic|run-help}} エイリアスを削除してください。{{ic|help}} は {{ic|run-help}} へのエイリアスにすることもできます。例えば、以下を {{ic|zshrc}} に追加してください:
  +
  +
autoload -Uz run-help
  +
(( ${+aliases[run-help]} )) && unalias run-help
  +
alias help=run-help
  +
  +
補助関数は別で有効化する必要があります:
  +
  +
autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn
  +
  +
例えば、{{ic|run-help git commit}} コマンドは、{{man|1|git}} ではなく {{man|1|git-commit}} の [[man ページ]]を開きます。
  +
  +
=== 継続的に rehash する ===
  +
  +
通常、compinit は {{ic|$PATH}} 内の新しい実行ファイルを自動的には見つけません。例えば、新しいパッケージをインストールした後、{{ic|/usr/bin/}} 内に追加された新しいファイルは即座に、または自動的には補完に含まれないでしょう。なので、そのような新しい実行ファイルを補完に含めるには、以下を実行してください:
  +
  +
$ rehash
  +
  +
この 'rehash' は、自動的に実行するよう設定できます。[https://github.com/robbyrussell/oh-my-zsh/issues/3440] 以下を {{ic|zshrc}} に追加するだけです:
   
 
{{hc|~/.zshrc|
 
{{hc|~/.zshrc|
  +
zstyle ':completion:*' rehash true
ttyctl -f}}
 
  +
}}
  +
  +
==== 必要なときにだけ rehash する ====
  +
  +
しかし、[[pacman フック]]を使って、自動的に {{ic|rehash}} を要求するように設定できます。こうすれば、先のセクションのように継続的に rehash してパフォーマンスが劣化してしまうようなことは起こりません。これを有効化するには、{{ic|/etc/pacman.d/hooks}} ディレクトリと {{ic|/var/cache/zsh}} ディレクトリを作成し、フックファイルを作成してください:
  +
  +
{{hc|head=/etc/pacman.d/hooks/zsh.hook|output=
  +
[Trigger]
  +
Operation = Install
  +
Operation = Upgrade
  +
Operation = Remove
  +
Type = Path
  +
Target = usr/bin/*
  +
[Action]
  +
Depends = zsh
  +
When = PostTransaction
  +
Exec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman
  +
}}
  +
  +
これは、{{ic|/var/cache/zsh/pacman}} ファイルの変更日時を、最後にパッケージをインストール/アップグレード/アンインストールした時間に合わせます。次に、{{ic|zsh}} のコマンドキャッシュが古くなったときにコマンドキャッシュを rehash するように設定します。以下を {{ic|~/.zshrc}} に追加してください:
  +
  +
{{hc|~/.zshrc|<nowiki>
  +
zshcache_time="$(date +%s%N)"
  +
  +
autoload -Uz add-zsh-hook
  +
  +
rehash_precmd() {
  +
if [[ -a /var/cache/zsh/pacman ]]; then
  +
local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)"
  +
if (( zshcache_time < paccache_time )); then
  +
rehash
  +
zshcache_time="$paccache_time"
  +
fi
  +
fi
  +
}
  +
  +
add-zsh-hook -Uz precmd rehash_precmd
  +
</nowiki>}}
  +
  +
{{ic|/var/cache/zsh/pacman}} が更新されるまえに {{ic|precmd}} フックがトリガーされた場合、新しいプロンプトが始まるまで補完が効かないかもしれません。そういうときは、空のコマンドを実行すれば良いはずです (例えば、{{ic|enter}} を押す)。
   
==== terminfo を使い方法 ====
+
==== SIGUSR1 を使って必要ときにだけ rehash する ====
   
  +
フックファイルは以下のようになります。
{{ic|autoload zkbd}} を実行してから {{ic|zkbd}} を実行して下さい。キーを押せない場合は (例: {{ic|F11}} はウィンドウを最大化します)、スペースを押してスキップして下さい。zkbd が完了した後、以下を {{ic|~/.zshrc}} に追加して下さい:
 
   
  +
{{hc|/etc/pacman.d/hooks/zsh-rehash.hook|output=
{{hc|~/.zshrc|autoload zkbd
 
  +
[Trigger]
source ~/.zkbd/$TERM-:0.0 # may be different - check where zkbd saved yours
 
  +
Operation = Install
  +
Operation = Upgrade
  +
Operation = Remove
  +
Type = Path
  +
Target = usr/bin/*
   
  +
[Action]
[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
 
  +
Depends = zsh
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
 
  +
Depends = procps-ng
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
 
  +
When = PostTransaction
[[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history
 
  +
Exec = /usr/bin/pkill zsh --signal=USR1
[[ -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
 
 
}}
 
}}
   
  +
{{Warning|このフックは、実行中の {{ic|zsh}} インスタンスすべてに SIGUSR1 を送信します。注意すべきなのは、SIGUSR1 のデフォルトの挙動は「終了」だということです。なので、このフックを先に設定してしまうと、すべてのユーザの実行中の {{ic|zsh}} インスタンス (ログインシェルも含む) のうち以下のトラップを source していないものが、終了してしまいます。}}
==== ncurses アプリケーションのキーバインド ====
 
  +
  +
{{hc|~/.zshrc|
  +
TRAPUSR1() { rehash }
  +
}}
  +
  +
この ''関数トラップ'' は、''リストトラップ'' {{ic|trap 'rehash' USR1}} に置き換えることもできます。トラップの種類の違いについては {{man|1|zshmisc|Trap Functions}} を見てください。
  +
  +
この方法は、すべての {{ic|zsh}} インスタンスを即座に {{ic|rehash}} します。なので、{{ic|precmd}} をトリガーするためにエンターキーを押す必要がありません。
  +
  +
=== ncurses アプリケーションにキーをバインド ===
  +
  +
ncurses アプリケーションをキーストロークにバインドしますが、対話を受け入れません。これを動作させるには {{ic|BUFFER}} 変数を使用します。次の例では、{{ic|Alt+\}} を使用して [[ncmpcpp]] を開くことができます。
   
ncurses アプリケーションをキーストロークにバインドすることが可能ですが、対話はできません。{{ic|BUFFER}} 変数を使って動作させて下さい。以下の例は {{ic|Alt+\}} で ncmpcpp を開きます:
 
 
{{hc|~/.zshrc|2=
 
{{hc|~/.zshrc|2=
ncmpcppShow() { BUFFER="ncmpcpp"; zle accept-line; }
+
ncmpcppShow() {
  +
BUFFER="ncmpcpp"
  +
zle accept-line
  +
}
 
zle -N ncmpcppShow
 
zle -N ncmpcppShow
 
bindkey '^[\' ncmpcppShow
 
bindkey '^[\' ncmpcppShow
 
}}
 
}}
   
  +
アプリケーションを呼び出す前に、行に入力した内容をすべて保持する別の方法
=== 履歴検索 ===
 
   
  +
{{hc|~/.zshrc|2=
以下の行を .zshrc に追加して下さい:
 
  +
ncmpcppShow() {
  +
ncmpcpp <$TTY
  +
zle redisplay
  +
}
  +
zle -N ncmpcppShow
  +
bindkey '^[\' ncmpcppShow
  +
}}
  +
  +
=== ファイルマネージャー風のキーバインド ===
  +
  +
グラフィックファイルマネージャで使われているようなキーバインドが便利かもしれません。1つ目はディレクトリ履歴 ({{ic|Alt+Left}}) に戻り、2つ目はユーザを親ディレクトリ ({{ic|Alt+Up}}) に移動させます。また、ディレクトリの内容も表示されます。
   
 
{{hc|~/.zshrc|<nowiki>
 
{{hc|~/.zshrc|<nowiki>
  +
cdUndoKey() {
[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward
 
  +
popd
[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward
 
  +
zle reset-prompt
  +
print
  +
ls
  +
zle reset-prompt
  +
}
  +
  +
cdParentKey() {
  +
pushd ..
  +
zle reset-prompt
  +
print
  +
ls
  +
zle reset-prompt
  +
}
  +
  +
zle -N cdParentKey
  +
zle -N cdUndoKey
  +
bindkey '^[[1;3A' cdParentKey
  +
bindkey '^[[1;3D' cdUndoKey
 
</nowiki>}}
 
</nowiki>}}
   
  +
=== xterm のタイトル ===
これを設定すると、現在の入力で始まる過去のコマンドだけが表示されるようになります。
 
   
  +
あなたのターミナルエミュレータがサポートしていれば、Zsh からターミナルのタイトルを設定できます。これにより、タイトルを動的に変更し、シェルの状態に関する状態 (例えば、ユーザ名とカレントディレクトリや現在実行中のコマンド) を表示できます。
=== ディレクトリスタック ===
 
   
  +
xterm のタイトルは [https://www.tldp.org/HOWTO/Xterm-Title-3.html#ss3.1 xterm の制御シーケンスオペレーティングシステムコマンド]である {{ic|\e]2;}}{{ic|\a}} か {{ic|\e]2;}}{{ic|\e\\}} で設定します。例えば:
Zsh を設定して DIRSTACKSIZE 最後に訪れたフォルダを覚えさせることが可能です。これにより素早く ''cd'' することができます。設定ファイルにいくつか設定を加える必要があります:
 
   
  +
$ print -n '\e]2;My xterm title\a'
{{hc|.zshrc|<nowiki>
 
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
 
   
  +
My xterm title
setopt autopushd pushdsilent pushdtohome
 
   
  +
タイトルを動的にするシンプルな方法は、{{ic|precmd}} フック関数と {{ic|preexec}} フック関数でタイトルを設定することです。利用可能なフック関数リストと説明は {{man|1|zshmisc|Hook Functions}} を見てください。
## Remove duplicate entries
 
setopt pushdignoredups
 
   
  +
{{ic|print -P}} を使えば、さらに Zsh のプロンプトエスケープも使用できます。
## This reverts the +/- operators.
 
  +
setopt pushdminus
 
  +
{{Tip|
  +
* タイトルの表示は複数のコマンドに分けることができます。ただし、コマンドは連続していなければなりません。
  +
* [[GNU Screen]] は、xterm のタイトルを hardstatus ({{ic|%h}}) に送信します。Screen の[https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html 文字列エスケープ]を使いたい場合 (例えば、色を付けたい場合など)、エスケープシーケンス {{ic|\e_}}{{ic|\e\\}} を使って hardstatus を設定する必要があります。文字列エスケープを {{ic|\e]2;}}{{ic|\a}} 内で使用した場合、ターミナルエミュレータは、Screen の文字列エスケープを解釈できないため、タイトルが文字化けしてしまいます。
  +
}}
  +
  +
{{Note|
  +
* 変数を表示するときに {{ic|print}} の {{ic|-P}} オプションは使用しないでください。変数がプロンプトエスケープとしてパースされてしまいます。
  +
* 変数を表示するときには、[https://zsh.sourceforge.io/Doc/Release/Expansion.html#Parameter-Expansion-Flags パラメータ展開フラグ] {{ic|q}} を使用してください。変数がエスケープシーケンスとしてパースされないようにするためです。
  +
}}
  +
  +
{{hc|~/.zshrc|<nowiki>
  +
autoload -Uz add-zsh-hook
  +
  +
function xterm_title_precmd () {
  +
print -Pn -- '\e]2;%n@%m %~\a'
  +
[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-}\e\\'
  +
}
  +
  +
function xterm_title_preexec () {
  +
print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"
  +
[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-} %# ' && print -n -- "${(q)1}\e\\"; }
  +
}
  +
  +
if [[ "$TERM" == (Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|wezterm*|tmux*|xterm*) ]]; then
  +
add-zsh-hook -Uz precmd xterm_title_precmd
  +
add-zsh-hook -Uz preexec xterm_title_preexec
  +
fi
 
</nowiki>}}
 
</nowiki>}}
   
  +
==== ターミナルエミュレータのタブのタイトル ====
次のコマンドでディレクトリスタックを表示できます:
 
dirs -v
 
{{ic|cd -<NUM>}} で訪問済みのフォルダに戻ります。ダッシュの後は自動補完が利用できます。自動補完メニューを使っている場合はとても役に立ちます。
 
   
  +
一部のターミナルエミュレータとマルチプレクサは、タブのタイトルの設定をサポートしています。そのためのエスケープシーケンスはターミナルによります:
{{Note|''zsh'' セッションを複数開いている場合、{{ic|cd}} しようとしても、両方のセッションによって同一のファイルに書き込む衝突が発生するため機能しません。}}
 
   
  +
{| class="wikitable sortable"
=== ヘルプコマンド ===
 
  +
! ターミナル
[[bash]] とは違って、''zsh'' は組み込まれている {{ic|help}} コマンドを有効にしていません。zsh で {{ic|help}} を使うには、以下を {{ic|zshrc}} に追加してください:
 
  +
! エスケープシーケンス
  +
! 説明
  +
|-
  +
! [[GNU Screen]]
  +
| {{ic|\ek}}{{ic|\e\\}}
  +
| Screen のウィンドウタイトル ({{ic|%t}})。
  +
|-
  +
! [[Konsole]]
  +
| {{ic|\e]30;}}{{ic|\a}}
  +
| Konsole のタブタイトル。
  +
|}
   
  +
=== シェル環境の検出 ===
{{bc|1=
 
autoload -U run-help
 
autoload run-help-git
 
autoload run-help-svn
 
autoload run-help-svk
 
unalias run-help
 
alias help=run-help
 
}}
 
   
  +
シェル環境を検出するテストは、[https://gitlab.com/jdorel-documentation/shell-environment-detection shell environment detection のリポジトリ]を見てください。これには、ログイン/インタラクティブシェル、Xorg セッション、TTY、SSH セッションの検出も含まれています。
=== アプリケーションの自動起動 ===
 
   
  +
=== /dev/tcp と等価な ztcp ===
Zsh はいつでも {{ic|/etc/zsh/zshenv}} と {{ic|$ZDOTDIR/.zshenv}} を実行します。なのでこれらのファイルをあまり肥大化させないでください。
 
   
  +
{{ic|zsh/net/tcp}} モジュールを使用してください:
シェルがログインシェルの場合、{{ic|/etc/profile}} そして {{ic|$ZDOTDIR/.zprofile}} からコマンドが読み込まれます。次に、シェルがインタラクティブの場合、{{ic|/etc/zsh/zshrc}} さらに {{ic|$ZDOTDIR/.zshrc}} からコマンドが読み込まれます。最後に、シェルがログインシェルの場合、{{ic|/etc/zsh/zlogin}} ついで {{ic|$ZDOTDIR/.zlogin}} が読み込まれます。
 
   
  +
$ zmodload zsh/net/tcp
{{ic|man zsh}} の ''STARTUP/SHUTDOWN FILES'' セクションも参照してください。
 
   
  +
これで、TCP 接続を確立できます:
== サードパーティ拡張 ==
 
   
  +
$ ztcp example.com 80
=== 設定フレームワーク ===
 
   
  +
詳細は {{man|1|zshmodules|THE_ZSH/NET/TCP_MODULE}} と {{man|1|zshtcpsys}} で見られます。
* [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/zsh-users/antigen Antigen] (AUR の {{AUR|antigen-git}} でインストール可能) - zsh のプラグインマネージャ。oh-my-zsh と vundle の影響を受けています。
 
   
  +
=== コマンドラインに文字があるときにもシェルを終了するショートカット ===
=== Plugin managers ===
 
   
  +
デフォルトでは、コマンドラインに文字が入力されている場合、{{ic|Ctrl+d}} はシェルを終了しません。これを修正するには:
* {{App|Antibody|A performance-focused plugin manager similar to Antigen.|https://github.com/getantibody/antibody|{{AUR|antibody}}}}
 
* {{App|zinit (previously "zplugin")|Flexible Zsh plugin manager with clean fpath, reports, completion management, turbo mode|http://github.com/zdharma/zinit|{{AUR|zsh-zplugin-git}}}}
 
* {{App|Antigen|A plugin manager for Zsh, inspired by oh-my-zsh and vundle. [https://github.com/zsh-users/antigen/issues/673 ABANDONED]|https://github.com/zsh-users/antigen|{{AUR|antigen-git}}}}
 
* {{App|zgen|A lightweight and simple plugin manager for Zsh. [https://github.com/tarjoilija/zgen/issues/123 ABANDONED]|https://github.com/tarjoilija/zgen|{{AUR|zgen-git}}}}
 
* {{App|zplug|A next-generation plugin manager for Zsh. [https://github.com/zplug/zplug/issues/403#issuecomment-477520784 ABANDONED]|https://github.com/zplug/zplug|{{AUR|zplug}}}}
 
   
  +
{{hc|.zshrc|
=== Fish のようなシンタックスハイライト ===
 
  +
exit_zsh() { exit }
  +
zle -N exit_zsh
  +
bindkey '^D' exit_zsh
  +
}}
   
  +
=== pacman -F "command not found" ハンドラー ===
[[Fish]] には強力なシェルシンタックスハイライトがあります。これを zsh で使うには、公式リポジトリから {{pkg|zsh-syntax-highlighting}} をインストールして以下を zshrc に追加します:
 
  +
{{bc|
 
  +
[[pacman]] には、あるファイルを含むパッケージを検索する機能があります。以下の command-not-found ハンドラは、不明なコマンドが実行されたときに、pacman を直接使用してマッチするパッケージを検索します。
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
 
  +
  +
{{hc|1=~/.zshrc|2=
  +
...
  +
function command_not_found_handler {
  +
local purple='\e[1;35m' bright='\e[0;1m' green='\e[1;32m' reset='\e[0m'
  +
printf 'zsh: command not found: %s\n' "$1"
  +
local entries=(
  +
${(f)"$(/usr/bin/pacman -F --machinereadable -- "/usr/bin/$1")"}
  +
)
  +
if (( ${#entries[@]} ))
  +
then
  +
printf "${bright}$1${reset} may be found in the following packages:\n"
  +
local pkg
  +
for entry in "${entries[@]}"
  +
do
  +
# (repo package version file)
  +
local fields=(
  +
${(0)entry}
  +
)
  +
if [[ "$pkg" != "${fields[2]}" ]]
  +
then
  +
printf "${purple}%s/${bright}%s ${green}%s${reset}\n" "${fields[1]}" "${fields[2]}" "${fields[3]}"
  +
fi
  +
printf ' /%s\n' "${fields[4]}"
  +
pkg="${fields[2]}"
  +
done
  +
fi
  +
return 127
  +
}
  +
...
 
}}
 
}}
   
  +
{{Note|pacman のファイルデータベースは、通常の同期データベースから分離されており、{{ic|pacman -Fy}} を使ってフェッチする必要があります。詳細は [[pacman#特定のファイルが含まれているパッケージを検索]] を見てください。}}
=== "command not found" フック ===
 
   
  +
''pkgfile'' を使う代替としては、[[#pkgfile の "command not found" ハンドラー]] を見てください。
[[pkgfile]] には、認識できないコマンドを入力したときに、自動的に公式リポジトリを検索する {{ic|command_not_found_handler}} 関数を提供する Zsh スクリプトファイルが含まれています。
 
   
  +
=== キーバインドを使ってバックバッファをクリアする ===
有効にするには、スクリプトを [[source]] する必要があります。例:
 
   
  +
デフォルトでは、画面をクリアするキーバインドは、ほとんどのターミナルエミュレータでバックバッファ (上にスクロールしないと見えない部分) をクリアしません。この問題の解決策とhしては:
{{hc|~/.zshrc|
 
  +
source /usr/share/doc/pkgfile/command-not-found.zsh
 
  +
{{hc|~/.zshrc|2=
  +
...
  +
function clear-screen-and-scrollback() {
  +
printf '\x1Bc'
  +
zle clear-screen
  +
}
  +
  +
zle -N clear-screen-and-scrollback
  +
bindkey '^L' clear-screen-and-scrollback
  +
...
 
}}
 
}}
   
  +
== サードパーティ拡張 ==
{{Note|pkgfile データベースの更新が必要な場合があります。[[pkgfile#Installation]] で詳細をご確認ください。}}
 
   
== アンインスト ==
+
=== 設定フレムワーク ===
   
  +
{{Note|フレームワークは、抽象化と複雑化のレベルを導入します。それらは未定義の挙動をもたらす可能性があり、シェルが壊れた場合、''最初の'' デバッグステップは、プレーンなシェルに戻ることです。}}
Zsh があなたに合わないと感じて Bash に戻りたいときは、Zsh パッケージを削除する前に必ず、まずデフォルトシェルを変更して下さい。
 
   
  +
* {{App|oh-my-posh|Oh My Posh は、関数か変数でプロンプト文字列を変更することのできる任意のシェルのためのカスタムプロンプトエンジンです。|https://github.com/JanDeDobbeleer/oh-my-posh|{{AUR|oh-my-posh}}}}
{{Warning|Failure to follow the below procedures will result in all kinds of problems: users will no longer have a working shell program.}}
 
  +
* {{App|oh-my-zsh|Zsh の設定を管理するためのコミュニティ運営の人気なフレームワークです。たくさんの便利な関数、ヘルパー、プラグイン、テーマをバンドルしています。|https://github.com/ohmyzsh/ohmyzsh|{{AUR|oh-my-zsh-git}}}}
  +
* {{App|Prezto|Zsh 用の設定フレームワークです。モジュールが同梱されており、適切なデフォルト、エイリアス、関数、オートコンプリート、プロンプトテーマでコマンドラインインターフェイス環境を充実させることができます。|https://github.com/sorin-ionescu/prezto|{{AUR|prezto-git}}}}
  +
* {{App|ZIM|驚異的なスピードとモジュール式拡張機能の付いた設定フレームワークです。Zim はとても簡単にカスタマイズでき、スピードと機能性を犠牲にせず、モジュールと機能の豊富なセットが付属しています。|https://github.com/zimfw/zimfw|{{AUR|zsh-zim-git}}}}
   
  +
=== プラグインマネージャー ===
ターミナルで次のコマンドを root で実行して下さい:
 
# chsh -s /bin/bash user
 
Zsh を使っている全てのユーザーで実行して下さい。
 
   
  +
* {{App|Antidote|レガシーな Antibody プラグインマネージャの完全な Zsh 実装です。|https://github.com/mattmc3/antidote|{{AUR|zsh-antidote}}}}
これで安全に Zsh パッケージを削除することができます。
 
  +
* {{App|zinit (旧 "zplugin")|柔軟な Zsh プラグインマネージャ。クリーンな fpath、レポート、補完管理、ターボモードが付いています。[https://github.com/zdharma-continuum/I_WANT_TO_HELP 復活しました]|https://github.com/zdharma-continuum/zinit|{{AUR|zinit}}}}
  +
* {{App|zi (旧 "zplugin")|zplugin の代替フォークです。zinit のようにオリジナルのプロジェクトの保持やメンテナンスではなく、オリジナルのプロジェクトを拡張することを目的としています。|https://github.com/z-shell/zi}}
  +
* {{App|sheldon|高速で設定可能なシェルプラグインマネージャです。Rust で書かれています。[https://github.com/rossmacarthur/sheldon]|https://github.com/rossmacarthur/sheldon|{{Pkg|sheldon}}}}
  +
* {{App|Antigen|Zsh 用のプラグインマネージャ。oh-my-zsh と vundle にインスパイアされました。[https://github.com/zsh-users/antigen/issues/673 放棄されています]|https://github.com/zsh-users/antigen|{{AUR|antigen-git}}}}
  +
* {{App|zgen|Zsh 用の軽量でシンプルなプラグインマネージャ。[https://github.com/tarjoilija/zgen/issues/123 放棄されています]|https://github.com/tarjoilija/zgen|{{AUR|zgen-git}}}}
  +
* {{App|zplug|Zsh 用の次世代プラグインマネージャ。[https://github.com/zplug/zplug/issues/403#issuecomment-477520784 放棄されています]|https://github.com/zplug/zplug|{{AUR|zplug}}}}
   
  +
=== Fish のようなシンタックスハイライトとオートサジェスト ===
以上を行わなかった場合、root で {{ic|/etc/passwd}} を編集することで Bash にデフォルトシェルを戻すことができます。
 
   
  +
[[Fish]] には強力なシェルシンタックスハイライトとオートサジェスト機能があります。これらの機能を zsh で使うには、{{pkg|zsh-syntax-highlighting}} と {{pkg|zsh-autosuggestions}} をインストールし、提供されたスクリプトの一方または両方を zshrc から [[source]] してください:
{{Warning|It is '''strongly''' recommended to use {{ic|vipw}} when editing user information as it prevents badly formatted entries.}}
 
   
  +
{{hc|1=~/.zshrc|2=
例:
 
  +
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
  +
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
  +
}}
   
  +
=== pkgfile の "command not found" ハンドラー ===
編集前:
 
  +
''username'':x:1000:1000:Full Name,,,:/home/''username'':/bin/zsh
 
  +
[[pkgfile]] には、{{ic|command_not_found_handler}} 関数を提供する Zsh スクリプトファイルが含まれています。この関数は、認識されないコマンドが入力されたときに、pkgfile のデータベースを自動的に検索します。
編集後:
 
  +
''username'':x:1000:1000:Full Name,,,:/home/''username'':/bin/bash
 
  +
この関数を有効化するには、そのスクリプトを [[source]] する必要があります。例えば:
  +
  +
{{hc|1=~/.zshrc|2=
  +
source /usr/share/doc/pkgfile/command-not-found.zsh
  +
}}
  +
  +
{{Note|pkgfile のデータベースは、この機能を使う前に更新が必要な場合があります。詳細は [[pkgfile#インストール]] を見てください。}}
  +
  +
pacman のネイティブな機能を使う代替は、[[#pacman -F "command not found" ハンドラー]] を見てください。
   
 
== 参照 ==
 
== 参照 ==
   
*[[Wikipedia:Zsh]]
+
* [[Wikipedia:ja:Z Shell]]
*[http://zsh.sourceforge.net/Intro/intro_toc.html An Introduction to the Z Shell]
+
* [https://zsh.sourceforge.io/Intro/intro_toc.html Z Shell イントロダクション]
*[http://zsh.sourceforge.net/Guide/zshguide.html ユーザガイド]
+
* [https://zsh.sourceforge.io/Guide/zshguide.html ZSH ユーザガイド]
*[http://zsh.sourceforge.net/Doc/Release/index-frame.html The Z Shell Manual] (different format available [http://zsh.sourceforge.net/Doc/ here])
+
* [https://zsh.sourceforge.io/Doc/Release/index-frame.html Z Shell マニュアル] ([https://zsh.sourceforge.io/Doc/ このページ]とは形式が異なります)
*[http://zsh.sourceforge.net/FAQ/zshfaq01.html Zsh FAQ]
+
* [https://zsh.sourceforge.io/FAQ/zshfaq01.html Zsh FAQ]
  +
* {{man|1|zsh-lovers}} ({{pkg|zsh-lovers}} パッケージとして利用可能)
*[http://zshwiki.org/home/ Zsh Wiki]
 
  +
* [[Gentoo: Zsh/Guide]]
*{{man|1|zsh-lovers}} (公式リポジトリの {{pkg|zsh-lovers}} で利用できます)
 
*[https://wiki.gentoo.org/wiki/Zsh/HOWTO Gentoo Wiki: Zsh/HOWTO]
+
* [https://www.bash2zsh.com/zsh_refcard/refcard.pdf Bash2Zsh Reference Card]
  +
*[http://www.bash2zsh.com/zsh_refcard/refcard.pdf Bash2Zsh Reference Card]
 
  +
{{TranslationStatus|Zsh|2024-09-22|816731}}

2024年9月22日 (日) 17:30時点における最新版

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 をデフォルトのシェルにする

シェルを /usr/bin/zsh に変更してください。コマンドラインシェル#デフォルトシェルを変更する を見てください。

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

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

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

デフォルトで、Zsh は起動時に以下のファイルを以下の順番で実行します (存在しているもののみ実行されます)。

  • /etc/zsh/zshenv すべてのユーザに対して環境変数を設定するために使用されます。このファイルには、出力を行うコマンドや、シェルが TTY に接続されていることを期待するコマンドを含めるべきではありません。このファイルが存在する場合、このファイルは 常に 読み込まれます。この挙動を上書きすることはできません。
  • $ZDOTDIR/.zshenv ユーザの環境変数を設定するために使用されます。このファイルには、出力を行うコマンドや、シェルが TTY に接続されていることを期待するコマンドを含めるべきではありません。このファイルが存在する場合、このファイルは 常に 読み込まれます。
  • /etc/zsh/zprofile すべてのユーザに対して起動時にコマンドを実行するために使用されます。ログインシェルとして起動した場合に、このファイルは読み込まれます。Arch Linux においては、このファイルには、/etc/profile を source する 1行がデフォルトで含まれていることを留意しておいてください。その行を削除したい場合は以下の警告を先に読んでください!
    • /etc/profile POSIX sh 互換のシェルはすべて、このファイルをログイン時に source する必要があります。このファイルは $PATH や他の環境変数を設定し、ログイン時にはアプリケーション固有 (/etc/profile.d/*.sh) の設定を行います。
  • $ZDOTDIR/.zprofile 起動時にユーザのコマンドを実行するために使用されます。ログインシェルとして起動した場合に、このファイルは読み込まれます。通常、グラフィカルセッションを自動起動し、セッションの環境変数を設定するために使用されます。
  • /etc/zsh/zshrc すべてのユーザに対して、インタラクティブシェルを設定したりコマンドを実行したりするために使用されます。インタラクティブシェルとして起動した場合に、このファイルは読み込まれます。
  • $ZDOTDIR/.zshrc ユーザのインタラクティブシェルを設定したり、コマンドを実行したりするために使用されます。インタラクティブシェルとして起動した場合に、このファイルは読み込まれます。
  • /etc/zsh/zlogin すべてのユーザに対して初期化処理の最後にコマンドを実行するために使用されます。ログインシェルとして起動した場合に、このファイルは読み込まれます。
  • $ZDOTDIR/.zlogin 初期化処理の最後にユーザのコマンドを実行するために使用されます。ログインシェルとして起動した場合に、このファイルは読み込まれます。通常、コマンドラインユーティリティを自動起動するために使用されます。グラフィカルセッションを自動起動するために使用するべきではありません (この時点では、インタラクティブシェルにおいてのみ意味を持つ設定がセッションに含まれているかもしれないからです)。
  • $ZDOTDIR/.zlogout ログインシェル終了 する時にコマンドを実行するために使用されます。
  • /etc/zsh/zlogout ログインシェル終了 する時にすべてのユーザに対してコマンドを実行するために使用されます。

the graphic representation を参照してください。

ノート: $HOME/.profile は Zsh のスタートアップファイルの一部ではありません。さらに、Zsh によって source されません (Zsh が shksh として実行され、ログインシェルとして起動しない限り)。sh や ksh との互換性モードに関する詳細は zsh(1) § COMPATIBILITY を見てください。
警告: /etc/zsh/zprofile 内にデフォルトで存在する 一行を削除しないでください。さもないと、/etc/profile.d/ 内へスクリプトを提供するパッケージの整合性が破壊されてしまいます。

Zsh の設定

Zsh は何も設定しなくても使うことができますが、ほとんどのユーザが使いたいと思うようには設定されていないことはほぼ確実です。ただし、Zsh で利用できるカスタマイズの量は膨大で、Zsh を設定するのは大変で時間を浪費する経験となるでしょう。自動的に設定するには #サードパーティ拡張 を見てください。

シンプルな .zshrc

以下は設定ファイルのサンプルです。デフォルトのオプションの適切なセットと共に、Zsh でカスタマイズ可能な方法の例を提供します。この設定を使うには、.zshrc という名前のファイルに保存してください。

ヒント: ログアウトせずに変更を適用するには source ~/.zshrc を実行してください。

これはシンプルな .zshrc です:

~/.zshrc
autoload -Uz compinit promptinit
compinit
promptinit

# デフォルトのプロンプトを walters テーマに設定する
prompt walters

プロンプトテーマシステムに関する詳細は #プロンプトテーマ を見てください。

$PATH の設定

Zsh は PATH 変数を path 配列に結びつけます。これにより、path 配列を変更するだけで PATH 変数を操作することができます。詳細は A User's Guide to the Z-Shell を見てください。

~/.local/bin/PATH に追加するには:

~/.zshenv
typeset -U path PATH
path=(~/.local/bin $path)
export PATH

コマンド補完

Zsh の一番魅力的な機能はおそらく先進的な自動補完機能でしょう。少なくとも .zshrc で自動補完を有効化してください。自動補完を有効にするには、以下を ~/.zshrc に追加してください:

~/.zshrc
autoload -Uz compinit
compinit

上記の設定には ssh/scp/sftp ホスト名の補完が含まれていますが、この機能を動作させるためにはユーザは ssh のホスト名ハッシュ化 (つまり、ssh クライアントの設定の HashKnownHosts オプション) を有効化してはなりません。

矢印キーを使うインターフェイスで自動補完を行うには、以下を追加してください:

~/.zshrc
zstyle ':completion:*' menu select

メニューをアクティブにするには、Tab を2回押してください。

特権が与えられたコマンドで特権環境の自動補完を有効化するには (例えば、sudo で始まるコマンドを補完する場合、補完スクリプトは sudo の補完もしようと試みます)、以下を追加してください:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
警告: これにより、Zsh の補完スクリプトが sudo 特権でコマンドを実行できてしまいます。信頼できない補完スクリプトを使用する場合はこれを有効化すべきではありません。
ノート: この特殊な種類の文脈依存の補完は、少数のコマンドでしか利用できません。

カスタムの補完

カスタムの補完を自分で作ることもできます。詳細は zshcompsys(1) man ページを参照してください。

公式のドキュメントは難解かもしれません。簡単なスタートポイントとして、よりシンプルな zsh-completion-howto チュートリアルもあります。

キーバインド

Zsh は readline を使用しません。代わりに、よりパワフルな独自の Zsh Line Editor (ZLE) を使用します。ZLE は /etc/inputrc~/.inputrc のどちらも読み込みません。ZLE 設定のイントロダクションは A closer look at the zsh line editor and creating custom widgets を読んでください。

ZLE には Emacs モードと vi モードがあります。VISUALEDITOR のどちらか一方の環境変数vi という文字列が含まれている場合、vi モードが使用されます。それ以外の場合、Emacs モードをデフォルトで使用します。bindkey -e (Emacs モード) や bindkey -v (vi モード) でモードを明示的に設定することもできます。デフォルトでは、vi モードでの Esc キーを押した時の遅延は 0.4 秒ですが、export KEYTIMEOUT=5 でより短く (0.05 秒) することができます。

キーバインドは、キープレスに対応するエスケープシーケンスを ZLE ウィジェットにマッピングすることにより割り当てます。利用可能なウィジェットは zshzle(1) § STANDARD WIDGETSzshcontrib(1) § ZLE FUNCTIONS にリストアップされています (アクションとデフォルトのキーバインドの説明付き)。

Zsh でキーバインドを設定する方法として推奨されるのは、terminfo(5) の文字列ケーパビリティを使用することです。例えば [1][2]:

~/.zshrc
# zkbd と互換性のあるハッシュテーブルを作成し、
# 他のキーをこのハッシュテーブルに追加する (man 5 terminfo を参照)
typeset -g -A key

key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
key[Insert]="${terminfo[kich1]}"
key[Backspace]="${terminfo[kbs]}"
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]}"
key[Shift-Tab]="${terminfo[kcbt]}"

# 適宜キーを設定する
[[ -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[Backspace]}" ]] && bindkey -- "${key[Backspace]}"  backward-delete-char
[[ -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
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}"  reverse-menu-complete

# 最後に、zle がアクティブのときにターミナルがアプリケーションモードになるようにする。
# そのときにだけ、$terminfo の値が有効になる。
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
	autoload -Uz add-zle-hook-widget
	function zle_application_mode_start { echoti smkx }
	function zle_application_mode_stop { echoti rmkx }
	add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
	add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi

履歴検索

以下の手順を使うには、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

これにより、UpDown を押したときに、現在の行のカーソル位置までにマッチする過去のコマンドだけが表示されます。

修飾キー Shift、Alt、Ctrl、Meta

xterm 互換端末は user_caps(5) からの拡張キー定義を使うことができます。キー定義は、ShiftAltCtrlMeta と、UpDownLeftRightPageUpPageDownHomeEndDel のどれかを組み合わせたものです。修飾キーとキーの組み合わせに推奨される名前の一覧については、zkbd のソース を参照してください。

たとえば、 Ctrl+Left で前の単語の先頭に移動し、Ctrl+Right で次の単語の先頭に移動させるには:

~/.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 は2つの選択肢を提供します: プロンプトテーマを使用するか、テーマに不満がある (または、テーマの使いやすさを自分で拡張したい) ユーザはカスタムのプロンプトを構築できます。

プロンプトテーマ

プロンプトテーマは、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 を適宜編集することができます。

テーマごとにファイルを分けずにプロンプトテーマを追加する

プロンプトテーマは、テーマのファイルを使って追加するだけでなく、ある1つのファイル (例えば .zshrc) 内からテーマを追加することもできます。例えば:

~/.zshrc
# promptinit をロードする
autoload -Uz promptinit && promptinit

# テーマを定義する
prompt_mytheme_setup() {
  PS1="%~%# "
}

# promptsys にそのテーマを追加する
prompt_themes+=( mytheme )

# テーマをロードする
prompt mytheme

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

すべてのシェルで一般的な主要な左側のプロンプト PS1 (PROMPTprompt) に加えて、Zsh では右側のプロンプト RPS1 (RPROMPT) もサポートしています。これら2つの変数は、好きな値にカスタムできます。

他の特殊な目的のためのプロンプト (PS2 (PROMPT2)、PS3 (PROMPT3)、PS4 (PROMPT4)、RPS1 (RPROMPT)、RPS2 (RPROMPT2)、SPROMPT など) は zshparam(1) § PARAMETERS USED BY THE SHELL で説明されています。

すべてのプロンプトは、プロンプトエスケープでカスタマイズできます (例えば、%n はユーザ名になります)。利用可能なプロンプトエスケープは zshmisc(1) § EXPANSION OF PROMPT SEQUENCES でリストアップされています。

Zsh は、Bash とは異なる方法で色を設定します。ANSI エスケープシーケンスや、terminfo(5) のターミナルケーパビリティを多用する必要はありません。Zsh は、前景色、背景色、他の視覚エフェクトを設定するための便利なプロンプトエスケープを提供します。エスケープのリストや説明は zshmisc(1) § Visual effects を見てください。

を指定する方法は3つあります: 10進数の整数、8つの広くサポートされている色の名前、# のあとに16進数の RGB トリプレット。詳細は zshzle(1) § CHARACTER HIGHLIGHTING 内の fg=colour の説明を見てください。

ほとんどのターミナルは以下の色を名前でサポートしています:

名前 番号
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

xterm 256 color と互換性のあるターミナルエミュレータの色番号 0 から 255 は、xterm-256color チャートで見られます。

TERM 環境変数が正しく設定されていれば、ターミナルのサポートする色の最大数は、terminfo(5) データベースから echoti colors を使って確認することができます。24-bit カラーの場合は、print $COLORTERM を使って COLORTERM 環境変数も確認してください。24bittruecolor を返した場合、たとえ terminfo がより少ない数値を表示したとしても、あなたのターミナルは 16777216 (224) 色をサポートしています。

ノート:
  • 0 から 15 の色は、ターミナルエミュレータやカラースキームごとに異なる場合があります。
  • 多くのターミナルエミュレータは、太文字を明るい色で表示します。
ヒント:
  • プロンプトのエスケープは print -P "prompt escapes" コマンドでテストできます。例えば、
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • 24 ビットカラーを使用する場合、24 ビットカラーをサポートしていないターミナルでは zsh/nearcolor モジュールをロードする必要があるかもしれません。例えば:
    [[ "$COLORTERM" == (24bit|truecolor) || "${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor
    zsh/nearcolor モジュールに関する詳細は zshmodules(1) § THE ZSH/NEARCOLOR MODULE を見てください。

これは、シンプルな色無しのプロンプトの例です:

PROMPT='%n@%m %~ %# '

以下のように出力されます:

username@host ~ %

これは、色付きの左右両方のプロンプトの例です:

PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# '
RPROMPT='[%F{yellow}%?%f]'

以下のように出力されます:

username@host ~ % [0]

16-255 の範囲の色は、欲しい色に割り当てた 0 から 255 までの数値を使うことで使用できます。また、24 ビットトゥルーカラーは16進数のカラーコードを使うことで使用できます:

PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# '
RPROMPT='[%F{3}%?%f]'
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# '
RPROMPT='[%F{#0000ff}%?%f]'

サンプルの .zshrc ファイル

さらに見たい場合は ドットファイル#ユーザーリポジトリ を見てください。

ヒントとテクニック

ログイン時に X を自動起動

xinit#ログイン時に X を自動起動を参照してください。

プログラムが異常終了した後、端末の設定を復元する

多くのプログラムはターミナルの状態を変更し、異常終了したときにターミナルの設定を復元しないことがあります (例えば、クラッシュしたときや、SIGINT を受け取ったとき)。

通常、これは reset(1) を実行することで解決できます:

$ reset

以下のセクションでは、手動でターミナルをリセットする手間を省く方法について説明します。

ttyctl コマンド

ttyctl コマンドを使ってターミナルを "freeze/unfreeze" することができます。起動時にインタラクティブシェルを freeze させるには、以下を使用してください:

~/.zshrc
ttyctl -f

エスケープシーケンスで端末をリセットする

代替の線画文字セットは、ttyctl が防ぐことができない方法でターミナルを台無しにしてしまうことがあります。

シンプルな解決法は、ターミナルをリセットするエスケープシーケンスを precmd フック関数から出力することです。そうすれば、プロンプトが描画される前に毎回、そのエスケープシーケンスが出力されます。例えば、エスケープシーケンス \e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8 を使うと:

~/.zshrc
autoload -Uz add-zsh-hook

function reset_broken_terminal () {
	printf '%b' '\e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8'
}

add-zsh-hook -Uz precmd reset_broken_terminal

うまく行くか試すには、以下を実行してください:

$ print '\e(0\e)B'

最近のディレクトリを記憶させる

Dirstack

Zsh は、最後に訪れたフォルダのうち DIRSTACKSIZE 個を記憶するように設定できます。この機能を活用すれば、それらのフォルダへ非常に素早く cd することができます。設定ファイルにいくつかの行を追加する必要があります:

~/.zshrc
autoload -Uz add-zsh-hook

DIRSTACKFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/dirs"
if [[ -f "$DIRSTACKFILE" ]] && (( ${#dirstack} == 0 )); then
	dirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")
	[[ -d "${dirstack[1]}" ]] && cd -- "${dirstack[1]}"
fi
chpwd_dirstack() {
	print -l -- "$PWD" "${(u)dirstack[@]}" > "$DIRSTACKFILE"
}
add-zsh-hook -Uz chpwd chpwd_dirstack

DIRSTACKSIZE='20'

setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME

## 重複するエントリを削除する
setopt PUSHD_IGNORE_DUPS

## +/- 演算子をもとに戻す。
setopt PUSHD_MINUS

これで、以下のコマンドを使えば dirstack を出力できます。 Now use

$ dirs -v

訪れたフォルダに戻るには cd -<NUM> を使ってください。ダッシュ記号の後でオートコンプリートを使ってください。オートコンプリートメニューを使う場合に便利です。

ノート: 2つ以上の zsh セッションを開いていて cd をしようとした場合、両方のセッションが同じファイルに書き込むことで競合が発生するため、これは動作しません。

cdr

cdr により、自動的に管理されるリストを使って現在の作業ディレクトリから以前の作業ディレクトリに移動することができます。cdr は、現在のセッションでセッション間および (デフォルトで) ターミナルエミュレータ間で管理されるファイルにすべてのエントリを保存します。

セットアップの手順は zshcontrib(1) § REMEMBERING RECENT DIRECTORIES を見てください。

zoxide

zoxide は、よりスマートな cd コマンドで、数個のキーストロークで好きな場所に移動できます。zoxide は、頻繁に使用されるディレクトリを記憶し、スコアリングメカニズムを使って、あなたが行きたい場所を推測します。

ヘルプコマンド

Bash とは違い、Zsh は組み込みの help コマンドを有効化しておらず、代わりに run-help を提供しています。デフォルトでは、run-helpman のエイリアスとなっています。コマンドの前に run-help と付けることで実行できますし、または今タイプしたコマンドに対してキーボードショートカット Alt+hEsc h を入力することでも実行できます。

デフォルトでは man のエイリアスとなっているので、外部コマンドに対してしか動作しません。シェルの組み込みコマンドやシェルの他の機能でも動作するようにするには、run-help 関数を使う必要があります。run-help や補助関数については zshcontrib(1) を見てください。

まず、run-help 関数をロードし、その次に既存の run-help エイリアスを削除してください。helprun-help へのエイリアスにすることもできます。例えば、以下を zshrc に追加してください:

autoload -Uz run-help
(( ${+aliases[run-help]} )) && unalias run-help
alias help=run-help

補助関数は別で有効化する必要があります:

autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn

例えば、run-help git commit コマンドは、git(1) ではなく git-commit(1)man ページを開きます。

継続的に rehash する

通常、compinit は $PATH 内の新しい実行ファイルを自動的には見つけません。例えば、新しいパッケージをインストールした後、/usr/bin/ 内に追加された新しいファイルは即座に、または自動的には補完に含まれないでしょう。なので、そのような新しい実行ファイルを補完に含めるには、以下を実行してください:

$ rehash

この 'rehash' は、自動的に実行するよう設定できます。[3] 以下を zshrc に追加するだけです:

~/.zshrc
zstyle ':completion:*' rehash true

必要なときにだけ rehash する

しかし、pacman フックを使って、自動的に rehash を要求するように設定できます。こうすれば、先のセクションのように継続的に rehash してパフォーマンスが劣化してしまうようなことは起こりません。これを有効化するには、/etc/pacman.d/hooks ディレクトリと /var/cache/zsh ディレクトリを作成し、フックファイルを作成してください:

/etc/pacman.d/hooks/zsh.hook
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Path
Target = usr/bin/*
[Action]
Depends = zsh
When = PostTransaction
Exec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman

これは、/var/cache/zsh/pacman ファイルの変更日時を、最後にパッケージをインストール/アップグレード/アンインストールした時間に合わせます。次に、zsh のコマンドキャッシュが古くなったときにコマンドキャッシュを rehash するように設定します。以下を ~/.zshrc に追加してください:

~/.zshrc
zshcache_time="$(date +%s%N)"

autoload -Uz add-zsh-hook

rehash_precmd() {
  if [[ -a /var/cache/zsh/pacman ]]; then
    local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)"
    if (( zshcache_time < paccache_time )); then
      rehash
      zshcache_time="$paccache_time"
    fi
  fi
}

add-zsh-hook -Uz precmd rehash_precmd

/var/cache/zsh/pacman が更新されるまえに precmd フックがトリガーされた場合、新しいプロンプトが始まるまで補完が効かないかもしれません。そういうときは、空のコマンドを実行すれば良いはずです (例えば、enter を押す)。

SIGUSR1 を使って必要なときにだけ rehash する

フックファイルは以下のようになります。

/etc/pacman.d/hooks/zsh-rehash.hook
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Path
Target = usr/bin/*

[Action]
Depends = zsh
Depends = procps-ng
When = PostTransaction
Exec = /usr/bin/pkill zsh --signal=USR1
警告: このフックは、実行中の zsh インスタンスすべてに SIGUSR1 を送信します。注意すべきなのは、SIGUSR1 のデフォルトの挙動は「終了」だということです。なので、このフックを先に設定してしまうと、すべてのユーザの実行中の zsh インスタンス (ログインシェルも含む) のうち以下のトラップを source していないものが、終了してしまいます。
~/.zshrc
TRAPUSR1() { rehash }

この 関数トラップ は、リストトラップ trap 'rehash' USR1 に置き換えることもできます。トラップの種類の違いについては zshmisc(1) § Trap Functions を見てください。

この方法は、すべての zsh インスタンスを即座に rehash します。なので、precmd をトリガーするためにエンターキーを押す必要がありません。

ncurses アプリケーションにキーをバインド

ncurses アプリケーションをキーストロークにバインドしますが、対話を受け入れません。これを動作させるには BUFFER 変数を使用します。次の例では、Alt+\ を使用して ncmpcpp を開くことができます。

~/.zshrc
ncmpcppShow() {
  BUFFER="ncmpcpp"
  zle accept-line
}
zle -N ncmpcppShow
bindkey '^[\' ncmpcppShow

アプリケーションを呼び出す前に、行に入力した内容をすべて保持する別の方法

~/.zshrc
ncmpcppShow() {
  ncmpcpp <$TTY
  zle redisplay
}
zle -N ncmpcppShow
bindkey '^[\' ncmpcppShow

ファイルマネージャー風のキーバインド

グラフィックファイルマネージャで使われているようなキーバインドが便利かもしれません。1つ目はディレクトリ履歴 (Alt+Left) に戻り、2つ目はユーザを親ディレクトリ (Alt+Up) に移動させます。また、ディレクトリの内容も表示されます。

~/.zshrc
cdUndoKey() {
  popd
  zle       reset-prompt
  print
  ls
  zle       reset-prompt
}

cdParentKey() {
  pushd ..
  zle      reset-prompt
  print
  ls
  zle       reset-prompt
}

zle -N                 cdParentKey
zle -N                 cdUndoKey
bindkey '^[[1;3A'      cdParentKey
bindkey '^[[1;3D'      cdUndoKey

xterm のタイトル

あなたのターミナルエミュレータがサポートしていれば、Zsh からターミナルのタイトルを設定できます。これにより、タイトルを動的に変更し、シェルの状態に関する状態 (例えば、ユーザ名とカレントディレクトリや現在実行中のコマンド) を表示できます。

xterm のタイトルは xterm の制御シーケンスオペレーティングシステムコマンドである \e]2;\a\e]2;\e\\ で設定します。例えば:

$ print -n '\e]2;My xterm title\a'

このコマンドは、タイトルを以下に設定します:

My xterm title

タイトルを動的にするシンプルな方法は、precmd フック関数と preexec フック関数でタイトルを設定することです。利用可能なフック関数リストと説明は zshmisc(1) § Hook Functions を見てください。

print -P を使えば、さらに Zsh のプロンプトエスケープも使用できます。

ヒント:
  • タイトルの表示は複数のコマンドに分けることができます。ただし、コマンドは連続していなければなりません。
  • GNU Screen は、xterm のタイトルを hardstatus (%h) に送信します。Screen の文字列エスケープを使いたい場合 (例えば、色を付けたい場合など)、エスケープシーケンス \e_\e\\ を使って hardstatus を設定する必要があります。文字列エスケープを \e]2;\a 内で使用した場合、ターミナルエミュレータは、Screen の文字列エスケープを解釈できないため、タイトルが文字化けしてしまいます。
ノート:
  • 変数を表示するときに print-P オプションは使用しないでください。変数がプロンプトエスケープとしてパースされてしまいます。
  • 変数を表示するときには、パラメータ展開フラグ q を使用してください。変数がエスケープシーケンスとしてパースされないようにするためです。
~/.zshrc
autoload -Uz add-zsh-hook

function xterm_title_precmd () {
	print -Pn -- '\e]2;%n@%m %~\a'
	[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-}\e\\'
}

function xterm_title_preexec () {
	print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"
	[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-} %# ' && print -n -- "${(q)1}\e\\"; }
}

if [[ "$TERM" == (Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|wezterm*|tmux*|xterm*) ]]; then
	add-zsh-hook -Uz precmd xterm_title_precmd
	add-zsh-hook -Uz preexec xterm_title_preexec
fi

ターミナルエミュレータのタブのタイトル

一部のターミナルエミュレータとマルチプレクサは、タブのタイトルの設定をサポートしています。そのためのエスケープシーケンスはターミナルによります:

ターミナル エスケープシーケンス 説明
GNU Screen \ek\e\\ Screen のウィンドウタイトル (%t)。
Konsole \e]30;\a Konsole のタブタイトル。

シェル環境の検出

シェル環境を検出するテストは、shell environment detection のリポジトリを見てください。これには、ログイン/インタラクティブシェル、Xorg セッション、TTY、SSH セッションの検出も含まれています。

/dev/tcp と等価な ztcp

zsh/net/tcp モジュールを使用してください:

$ zmodload zsh/net/tcp

これで、TCP 接続を確立できます:

$ ztcp example.com 80

詳細は zshmodules(1) § THE_ZSH/NET/TCP_MODULEzshtcpsys(1) で見られます。

コマンドラインに文字があるときにもシェルを終了するショートカット

デフォルトでは、コマンドラインに文字が入力されている場合、Ctrl+d はシェルを終了しません。これを修正するには:

.zshrc
exit_zsh() { exit }
zle -N exit_zsh
bindkey '^D' exit_zsh

pacman -F "command not found" ハンドラー

pacman には、あるファイルを含むパッケージを検索する機能があります。以下の command-not-found ハンドラは、不明なコマンドが実行されたときに、pacman を直接使用してマッチするパッケージを検索します。

~/.zshrc
...
function command_not_found_handler {
    local purple='\e[1;35m' bright='\e[0;1m' green='\e[1;32m' reset='\e[0m'
    printf 'zsh: command not found: %s\n' "$1"
    local entries=(
        ${(f)"$(/usr/bin/pacman -F --machinereadable -- "/usr/bin/$1")"}
    )
    if (( ${#entries[@]} ))
    then
        printf "${bright}$1${reset} may be found in the following packages:\n"
        local pkg
        for entry in "${entries[@]}"
        do
            # (repo package version file)
            local fields=(
                ${(0)entry}
            )
            if [[ "$pkg" != "${fields[2]}" ]]
            then
                printf "${purple}%s/${bright}%s ${green}%s${reset}\n" "${fields[1]}" "${fields[2]}" "${fields[3]}"
            fi
            printf '    /%s\n' "${fields[4]}"
            pkg="${fields[2]}"
        done
    fi
    return 127
}
...
ノート: pacman のファイルデータベースは、通常の同期データベースから分離されており、pacman -Fy を使ってフェッチする必要があります。詳細は pacman#特定のファイルが含まれているパッケージを検索 を見てください。

pkgfile を使う代替としては、#pkgfile の "command not found" ハンドラー を見てください。

キーバインドを使ってバックバッファをクリアする

デフォルトでは、画面をクリアするキーバインドは、ほとんどのターミナルエミュレータでバックバッファ (上にスクロールしないと見えない部分) をクリアしません。この問題の解決策とhしては:

~/.zshrc
...
function clear-screen-and-scrollback() {
    printf '\x1Bc'
    zle clear-screen
}

zle -N clear-screen-and-scrollback
bindkey '^L' clear-screen-and-scrollback
...

サードパーティ拡張

設定フレームワーク

ノート: フレームワークは、抽象化と複雑化のレベルを導入します。それらは未定義の挙動をもたらす可能性があり、シェルが壊れた場合、最初の デバッグステップは、プレーンなシェルに戻ることです。
  • oh-my-posh — Oh My Posh は、関数か変数でプロンプト文字列を変更することのできる任意のシェルのためのカスタムプロンプトエンジンです。
https://github.com/JanDeDobbeleer/oh-my-posh || oh-my-poshAUR
  • oh-my-zsh — Zsh の設定を管理するためのコミュニティ運営の人気なフレームワークです。たくさんの便利な関数、ヘルパー、プラグイン、テーマをバンドルしています。
https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR
  • Prezto — Zsh 用の設定フレームワークです。モジュールが同梱されており、適切なデフォルト、エイリアス、関数、オートコンプリート、プロンプトテーマでコマンドラインインターフェイス環境を充実させることができます。
https://github.com/sorin-ionescu/prezto || prezto-gitAUR
  • ZIM — 驚異的なスピードとモジュール式拡張機能の付いた設定フレームワークです。Zim はとても簡単にカスタマイズでき、スピードと機能性を犠牲にせず、モジュールと機能の豊富なセットが付属しています。
https://github.com/zimfw/zimfw || zsh-zim-gitAUR

プラグインマネージャー

  • Antidote — レガシーな Antibody プラグインマネージャの完全な Zsh 実装です。
https://github.com/mattmc3/antidote || zsh-antidoteAUR
  • zinit (旧 "zplugin") — 柔軟な Zsh プラグインマネージャ。クリーンな fpath、レポート、補完管理、ターボモードが付いています。復活しました
https://github.com/zdharma-continuum/zinit || zinitAUR
  • zi (旧 "zplugin") — zplugin の代替フォークです。zinit のようにオリジナルのプロジェクトの保持やメンテナンスではなく、オリジナルのプロジェクトを拡張することを目的としています。
https://github.com/z-shell/zi || パッケージが存在しないか AUR で検索
  • sheldon — 高速で設定可能なシェルプラグインマネージャです。Rust で書かれています。[4]
https://github.com/rossmacarthur/sheldon || sheldon
  • Antigen — Zsh 用のプラグインマネージャ。oh-my-zsh と vundle にインスパイアされました。放棄されています
https://github.com/zsh-users/antigen || antigen-gitAUR
https://github.com/tarjoilija/zgen || zgen-gitAUR
https://github.com/zplug/zplug || zplugAUR

Fish のようなシンタックスハイライトとオートサジェスト

Fish には強力なシェルシンタックスハイライトとオートサジェスト機能があります。これらの機能を zsh で使うには、zsh-syntax-highlightingzsh-autosuggestions をインストールし、提供されたスクリプトの一方または両方を zshrc から source してください:

~/.zshrc
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

pkgfile の "command not found" ハンドラー

pkgfile には、command_not_found_handler 関数を提供する Zsh スクリプトファイルが含まれています。この関数は、認識されないコマンドが入力されたときに、pkgfile のデータベースを自動的に検索します。

この関数を有効化するには、そのスクリプトを source する必要があります。例えば:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
ノート: pkgfile のデータベースは、この機能を使う前に更新が必要な場合があります。詳細は pkgfile#インストール を見てください。

pacman のネイティブな機能を使う代替は、#pacman -F "command not found" ハンドラー を見てください。

参照

翻訳ステータス: このページは en:Zsh の翻訳バージョンです。最後の翻訳日は 2024-09-22 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。