Zsh

Zsh は、対話型シェルとしてもスクリプト言語インタプリタとしても動作する強力なシェルです。 POSIX sh と互換性があり (デフォルトではありません。emulate sh を発行した場合のみ)、 改良されたタブ補完やグロビングなどの利点があります。

インストール

始める前に、ユーザーは現在どのシェルを使っているかを確認したいかもしれません。

Initial configuration

Zsh が正しくインストールされたことを確認するには、ターミナルで以下を実行します:

$ zsh

これで zsh-newuser-install が現れ、いくつかの基本設定を案内してくれるはずです。 これをスキップしたい場合は、q を押してください。

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
注意: 端末のサイズが少なくとも 72×15 であることを確認してください、さもなければ zsh-newuser-install は実行されません。

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

シェルを /usr/bin/zsh に変更する。 Command-line shell#Changing your default shell を参照してください。

Tip: bash を置き換える場合、ユーザはいくつかのコードを ~/.bashrc から ~/.zshrc へ (例えばプロンプトやエイリアス) と ~/.bash_profile から ~/.zprofile へ (例えば X Window System を起動するコード) 移動したくなるかもしれません。

Startup/Shutdown files

Tip:

  • 対話型シェルとログインシェル、および起動ファイルに何を入れるかについての説明は A User’s Guide to the Z-Shell を参照してください。
  • Zsh 設定ファイルの標準パスの実装を検討することもできます。
  • いずれかのファイルでオプション RCS が設定されていない場合、そのファイルの後の設定ファイルは読み込まれません。
  • いずれかのファイルでオプション GLOBAL_RCS が設定されていない場合、そのファイルの後のグローバル設定ファイル (/etc/zsh/*) は読み込まれません。

Zsh は起動時に、以下のファイルからコマンドが存在すればこの順序で読み込むようになっています。

  • /etc/zsh/zshenv すべてのユーザの環境変数を設定するために使用されます。出力を生成するコマンドや、シェルが TTY に接続されていると仮定するコマンドは含まれていてはいけません。 このファイルが存在する場合、常に読み込まれます。これは上書きできません。 このファイルが存在する場合、常に読み込まれます。
  • /etc/zsh/zprofile すべてのユーザの起動時にコマンドを実行するために使用され、ログインシェルとして起動するときに読み込まれます。 Arch Linux では、デフォルトで /etc/profile のソースが1行含まれていることに注意してください。
    • /etc/profile このファイルはログイン時にすべての POSIX sh 互換シェルによって読み込まれるべきです: ログイン時に $PATH やその他の環境変数、アプリケーション固有の (/etc/profile.d/*.sh) 設定を行います。
  • $ZDOTDIR/.zprofile 起動時にユーザが実行するコマンドとして用いられ、ログインシェルとして起動した際に読み込まれます。
  • /etc/zsh/zshrc 全てのユーザの対話型シェル設定とコマンド実行に使用され、対話型シェルとして起動したときに読み込まれます。
  • /etc/zsh/zlogin 初期進行の終了時に全ユーザのコマンドを実行するために使用され、ログインシェルとして起動すると読み込まれます。
  • $ZDOTDIR/.zlogin 初期進行の終了時にユーザのコマンドを実行するために使用され、ログインシェルとして起動すると読み込まれます。 通常、コマンドラインユーティリティを自動起動するために使用される。 グラフィカルセッションの自動起動には使用しないでください。この時点で、セッションは対話型シェルのみのための設定を含んでいるかもしれないからです。

グラフィック表現を参照。

注意:

  • $HOME/.profile は Zsh 起動ファイルの一部ではなく、Zsh が sh または ksh として起動されログインシェルとして開始しない限り Zsh がソースとすることはないです。 sh と ksh の互換モードについての詳細は zsh(1) § COMPATIBILITY を参照してください。
  • Arch の zsh パッケージで使われているパスは man ページで使われているデフォルトとは異なります (FS#48992).
警告:
Arch の zsh パッケージのパスは man ページで使われていないデフォルトのパスと同じです。 さもなければ、/etc/profile.d/ でいくつかのスクリプトを提供している他のパッケージの整合性が失われます。

Configure Zsh

Zsh は箱から出しても使えますが、ほとんどのユーザが使いたいように設定されていないことは確かです。

シンプルな .zshrc

以下に含まれる設定ファイルのサンプルは、Zsh で利用できるカスタマイズの膨大な量のため、Zsh を設定することは困難で時間のかかる経験となりえます。 これは、Zsh をカスタマイズすることができる多くの方法の例を示すだけでなく、デフォルトのオプションの適切なセットを提供します。 この設定を使用するには、.zshrc.

という名前のファイルとして保存してください。 source ~/.zshrc.

を実行してログアウトし、再びログインする必要なく変更を適用します。zshrc

autoload -Uz compinit promptinitcompinitpromptinit# これでデフォルトプロンプトが walters テーマに設定されますeprompt walters

See #Prompt themes for more details about the prompt theme system.

Configuring $PATH

Zsh は変数 PATH と配列 path とに結びつけています。 これらは自動的に同期されます。 これにより、配列を変更するだけで簡単に PATH を操作することができます。

-U が unique を意味する typeset -U PATH path 行は、$PATH$path の両方から重複を破棄するようシェルに指示しています:

~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH

コマンド補完

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

~/.zshrc
autoload -Uz compinitcompinit

上記の設定には ssh/scp/sftp のホスト名補完が含まれていますが、この機能を有効にするためにユーザーは ssh のホスト名ハッシュ (i.) を有効にしないようにしなければなりません。

矢印キー駆動のインターフェイスで自動補完を行うには、以下を追加します:

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

メニューを有効にするには、Tabを 2 回押してください。

エイリアスのコマンドラインスイッチのオートコンプリートを行うには、以下を追加します:

~/.zshrc
setopt COMPLETE_ALIASES

特権コマンドで特権環境のオートコンプリートを有効にするには (e….例: sudo で始まるコマンドを完了すると、補完スクリプトも sudo での補完を判断しようとする), include:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Warning: Zsh 補完スクリプトが sudo 権限でコマンドを実行できるようになります。
注意: この特別なコンテキストを考慮した補完は、少数のコマンドでのみ利用可能です。

キー割り当て

Zsh は readline を使用せず、独自の強力な Zsh Line Editor (ZLE) を使用します。 /etc/inputrc~/.inputrc は読み込まれません。 ZLE の設定の紹介は A closer look at the zsh line editor and creating custom widgets を読んでください。

ZLE には Emacs モードと vi モードがあります。 環境変数 VISUAL または EDITOR のいずれかが文字列 vi を含んでいる場合、vi モードが使用され、それ以外の場合は Emacs モードがデフォルトで使用されます。 Emacs モードと vi モードのために、それぞれ bindkey -ebindkey -v で明示的にモードを設定します。

キーバインディングは、キープレスに一致するエスケープシーケンスを ZLE ウィジェットにマッピングすることにより割り当てられます。 利用可能なウィジェットは、その動作とデフォルトのキーバインドの説明とともに、 zshzle(1) § STANDARD WIDGETS と zshcontrib(1) § ZLE FUNCTIONS にリストされています。

Zsh でキーバインドを設定する推奨方法は、 terminfo(5) から文字列機能を使用する方法です。 例えば:

~/.zshrc
# create a zkbd compatible hash;# to add other keys to this hash, see.Zshrc 
# create a zkbd compatible hash;# to add other keys to this hash, see: man 5 terminfotypeset -g -A keykey="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"# 適宜キーを設定する}" " ]] && bindkey -- "${key}" begin-of-line}". ]] && bindkey -- "${key}" end-of-line}". ]] && bindkey -- "${key}" overwrite-mode}". ]] && bindkey -- "${key}" backward-delete-char} " ]] && bindkey -- "${key}" delete-char}". ]] && bindkey -- "${key}" up-line-or-history} " ]] && bindkey -- "${key}" down-line-or-history}". ]] && bindkey -- "${key}" backward-char} " ]] && bindkey -- "${key}" forward-char}". ]] && bindkey -- "${key}" beginning-of-buffer-or-history} " ]] && bindkey -- "${key}" end-of-buffer-or-history}". ]] && bindkey -- "${key}" reverse-menu-complete# 最後に、端末がアプリケーションモードで、zleがアクティブになっていることを確認 # してください。 このときだけ、$terminfoからの値が有効になります。if (( ${+terminfo} && ${+terminfo} )); thenautoload -Uz add-zle-hook-widgetfunction 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- -Uz zle-application_mode_stop { echoti smkx }function zle-zle-hook-idgetfunction zle_application_mode_stop }add-zle-hook-widget { echoti rmkxhook-widget -Uz zle-line-finish zle_application_mode_stopfi

履歴検索

以下の命令を使用するには、key配列を設定して、ZLEがアプリケーションモードになることを確認する必要があります。 キーバインディングを参照してください。

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

~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search}"". ]] && bindkey -- "${key}" up-line-or-beginning-search}". ]] && bindkey -- "${key}" down-line-or-beginning-search

こうすることで、Up または Down キーを押したときに、現在のカーソル位置までの行にマッチした過去のコマンドのみを表示します。

Shift, Alt, Ctrl と Meta modifiers

xterm 互換ターミナルは user_caps(5) の拡張キー定義を使用可能です。 これらは、Shift, Alt, Ctrl, MetaUp, Down, Left, Right, PageUp, PageDown, Home, End, Del との組み合わせで使用します。 修飾キーとキーの組み合わせに推奨される名前のリストについては、zkbd のソースを参照してください。

例えば、Ctrl+Left で前の単語の先頭に、Ctrl+Right で次の単語の先頭に移動する場合:

~/.zshrc
key="${terminfo}"key="${terminfo}"}" ]] && bindkey -- "${key}" backward-word} " ]] && bindkey -- "${key}" forward-word

Prompts

Zsh はプロンプトテーマを使うオプションと、テーマに不満がある (あるいはその有用性を拡張したい) ユーザ向けに、カスタムプロンプトを構築する可能性を提供します。

Prompt themes

Zsh で色付きプロンプトを素早く簡単にセットする方法として、 プロンプトテーマがあります。

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

~/.NET Framework に追加することで行えます。zshrc
autoload -Uz promptinitpromptinit

利用可能なプロンプトテーマは、次のコマンドを実行すると表示されます:

$ prompt -l

例えば、waltersテーマを使用するには、次のコマンドを入力します。

$ prompt walters

利用可能なすべてのテーマをプレビューするには、次のコマンドを実行します:

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

外部の設定マネージャツールを使わずに、テーマを手動でインストールすることが可能です。 ローカルにインストールする場合は、まずフォルダを作成し、fpath 配列に追加してください。

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

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

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

これで、

$ prompt mytheme

を使ってテーマを有効にすることができます。

個別のファイルを使用せずにプロンプト テーマを追加する

独自のファイルを通してプロンプト テーマを追加することに加えて、別のファイル (.zshrc) からテーマを追加することも可能です。zshrc

# promptinitautoload をロードします。Uz promptinit && promptinit# Define themeeprompt_mytheme_setup() { PS1="%~%# "}# Add the theme to promptsysprompt_themes+=( mytheme )# Load the themeprompt mytheme

Customized prompt

Tango-view-fullscreen.png This article or section needs expansion.Thisはテーマとなるテーマです。Tango-view-fullscreen.png

理由を説明します。 シンプルな無色の PROMPT 例を追加。 (Talk:Zsh# で議論してください)

全てのシェルに共通な左側プロンプト PS1 (PROMPT, prompt) に加え、Zsh は右側プロンプト RPS1 (RPROMPT) もサポートします。 この 2 つの変数がカスタム値に設定したいものです。

その他の特別な目的のプロンプト、例えば PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2), SPROMPT は zshparam(1) § PARAMETERS USED BY THE SHELL.

全てのプロンプトはプロンプト・エスケープでカスタマイズ可能である。 利用可能なプロンプトエスケープは zshmisc(1) § EXPANSION OF PROMPT SEQUENCES.

Colors

Zsh は Bash と異なる色を設定するので、 複雑な ANSI エスケープシーケンスや terminfo(5) からの端末機能を使う必要はないです。 Zsh は、前景色、背景色、その他の視覚効果を設定するための便利なプロンプトエスケープを提供します。それらのリストと説明については、 zshmisc(1) § 視覚効果 を参照してください。

色は、10 進整数、最も広くサポートされている 8 色のうちの 1 つの名前、または # に続いて 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色対応端末エミュレータの色番号0〜255は、xterm-で確認することができます。256色カラーチャート

TERM 環境変数が正しく設定されている場合、端末がサポートする最大色数は echoti colors を使用して terminfo(5) データベースから見つけることができる。 24 ビット色の場合、print $COLORTERM を使って COLORTERM 環境変数も確認する。 もしこれが 24bittruecolor を返したら、たとえ terminfo がそれより小さい数を示していても、 端末は 16777216 (224) 色をサポートしていることになる。

Note:

  • 0-15 色は端末エミュレータとその使用配色によって違うかもしれない。
    • プロンプトエスケープは、たとえばコマンド print -P "prompt escapes" でテストすることができます。
      $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
    • 24bit カラーを使う場合、それをサポートしていない端末では zsh/nearcolor モジュールをロードした方がいいかもしれません。 例
      }" -eq '16777216' ]] || zmodload zsh/nearcolor

      zsh/nearcolor モジュールの詳細については zshmodules(1) § THE ZSH/NEARCOLOR MODULE を参照してください。

Example

This is an example of a two-sided prompt:

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

And this is how it will be displayed:

username@host ~ %

16-255 の範囲の色と 24 ビット True Color を使用するには、欲しい色に割り当てられた 0 から 255 の数字とその 16 進カラーコードをそれぞれ使用します:

PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# 'RPROMPT=''
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# 'RPROMPT=''

Sample .NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.NET.zshrc ファイル

  • 月刊 ISO のリリースと同じ設定にするには (デフォルトで Zsh を使用します)、 grml-zsh-config をインストールしてください。 これは 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 なしで実行)、メニューによるタブ補完、現在実行中のコマンドをウィンドウのタイトルバーに表示、などがあります。

    ヒントとコツ

    Autostart X at login

    See xinit#Autostart X at login.

    Restore terminal settings after a program exits abnormalally

    多くのプログラムは端末状態を変更し、しばしば異常終了時に端末設定を復元しない (例えば、クラッシュやSIGINTに出会った時) ことがあるようです。

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

    $ reset

    以下のセクションでは、手動で端末をリセットする必要性を回避する方法を説明します。

    ttyctl コマンド

    ttyctlコマンドは端末を「フリーズ/アンフリーズ」するのに使用することができます。

    ~/.zshrc
    ttyctl -f

    Reset the terminal with escape sequences

    Alternate linedrawing character set can screw up the terminal in a way which which ttyctl cannot prevent.

    簡単な解決策は、端末をリセットするエスケープシーケンスを precmd フック関数から出力し、プロンプトが描画される前に毎回実行されるようにすることである。 例えば、訪問したフォルダに戻るにはエスケープシーケンス \e] && (( ${#dirstack} == 0 )); thendirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")}" ]] && cd -- "${dirstack}"fichpwd_dirstack() {print -l -- "$PWD" "${(u)dirstack}" > "$DIRSTACKFILE"}add-zsh-hook -Uz chpwd chpwd_dirstackDIRSTACKSIZE='20'setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME## Remove duplicate entriessetopt PUSHD_IGNORE_DUPS## This reverts the +/- operators.setopt PUSHD_MINUS

    Now use

    $ dirs -v

    to print the dirstack. Use cd -<NUM> を使用する。 ダッシュの後にオートコンプリートを使用する。

    注意: 複数の zsh セッションを開いていて、cd を実行しようとすると、両方のセッションが同じファイルに書き込む際に衝突するため、動作しません。

    cdr

    cdr では、作業ディレクトリを自動的に保持されるリストから以前の作業ディレクトリに変更することができます。

    セットアップ方法については、zshcontrib(1) § REMEMBERING RECENT DIRECTORIES を参照してください。

    Help command

    Bash とは異なり、Zsh では内蔵の help コマンドを有効にせず、代わりに run-help を提供しています。 デフォルトでは run-helpman のエイリアスで、コマンドの前に付けて手動で実行するか、キーボードショートカットの Alt+hEsc h で現在入力中のコマンドに対して呼び出すことができるようになっています。 シェルビルトインや他のシェル機能で動作するように機能を向上させるには、 run-help 関数を使用する必要がある。 run-help とその補助関数についての詳細は zshcontrib(1) を参照してください。

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

    autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias 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) を開くようになりました。

    Persistent rehash

    通常 compinit は $PATH に新しい実行形式を自動的に見出すことはありません。 例えば、新しいパッケージをインストールした後、/usr/bin/ にあるファイルはすぐに、あるいは自動的に補完に含まれることはないでしょう。 したがって、これらの新しい実行可能ファイルを含めるには、次のように実行します:

    $ rehash

    この「リハッシュ」は自動的に行われるように設定することができます。 zshrc:

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

    On-demand rehash

    上記のように、しかし pacman にはフックを設定することで自動的に rehash を要求し、上記と同じ再ハッシュによるパフォーマンス低下を回避することが可能です。 これを有効にするには、/etc/pacman.d/hooks ディレクトリと /var/cache/zsh ディレクトリを作り、フックファイル

    /etc/pacman.d/hooks/zsh を作成します。hook
    Operation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman

    これによりファイルの修正日は /var/cache/zsh/pacman パッケージが最後にインストール・更新・削除された日と矛盾しないように保たれていることに注意してください。 そして、zsh が古くなったときに、コマンドキャッシュをリハッシュするように、~/.zshrc:

    ~/ に追加しなければなりません。zshrc
    zshcache_time="$(date +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; 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 フックが実行された場合、新しいプロンプトが起動するまで完了しない場合があります。

    SIGUSR1 を使った代替オンデマンドリハッシュ

    上記のように、しかしフックファイルは以下のようになります:

    /etc/pacman.d/hooks/zsh-rehash.hook
    Operation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
    Warning: これは、実行中のすべての zsh インスタンスに SIGUSR1 を送信します。 SIGUSR1 のデフォルトの動作は terminate であるため、最初にこれを設定すると、すべてのユーザーの実行中の zsh インスタンス (ログインシェルを含む) は、以下のトラップをソースしていない場合は終了します。
    ~/.zshrc
    TRAPUSR1() { rehash }

    上記の関数トラップをリストトラップに置き換えることができます trap 'rehash' USR1

    このメソッドは、すべての zsh インスタンスを即座に rehash 表示し、precmd を起動するために Enter を押す必要性をなくします。

    Bind key to ncurses application

    ncurses アプリケーションをキーストロークにバインドしますが、対話は受け付けません。 動作させるには BUFFER 変数を使用する。 次の例は、Alt+\:

    ~/.zshrc
    ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;

    \a.Ncmpcpp を使用すると、ユーザーは ncmpcpp を開けることができます。 例えば:

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

    はタイトルを

    My xterm title

    に設定します。動的なタイトルを持つ簡単な方法は、precmd および preexec フック関数でタイトルを設定することです。 利用可能なフック関数とその説明の一覧は zshmisc(1) § Hook Functions を参照してください。

    print -P を使うことで、さらに Zsh のプロンプトエスケープを利用できます。

    Tip:

    • タイトルの印刷は、連続したものであれば複数のコマンドに分割することができます。
    • GNU Screen は xterm のタイトルを hardstatus (%h) に送信します。 もし、Screen の文字列エスケープ (例: 色) を使いたい場合は、\e_\e\ というエスケープシーケンスで hardstatus を設定する必要があります。 そうしないと、\e]2;\a で文字列エスケープを使用した場合、端末エミュレータが Screen の文字列エスケープを解釈できないため、タイトルが文字化けしてしまいます。
    注意:

    • 変数を印刷する際に、print-P オプションを使って、プロンプトエスケープとして解釈されないようにした方がよい。
    • 変数の印刷時に q パラメータ展開フラグを使用し、エスケープシーケンスとして解析されるのを防ぎます。
    ~/.zshrc
    autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~a'] && print -Pn -- '\e_005{g}%nª5{-}@ª5{m}%m}ª5{-} \e]2;%n@%m %~ %# ' && print -n -- "${(q)1}" }function xterm_title_preexec () {print -Pn -- '\e]2;%n@%m %~ %# ' && { print -Pn -- '\e_Thanks {g}%n}@Thanks {m}%m005{-} && { print -Pn -- '\e_Thanks {g}%n}@Thanks {g}%m005{-}%p \005{B}%~\005{-} %# ' && print -n -- "${(q)1}e\"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

    Terminal emulator tab title

    Some terminal emulator and multiplexer support setting title of the tab. エスケープシーケンスはターミナルに依存します:

    ターミナル Escape sequences 説明
    GNUスクリーン \ek\e\ スクリーンのウィンドウタイトル (%t).
    Konsole \e]30;\a Konsoleのタブタイトル。

    Shell environment detection

    シェル環境を検出するためのテストについては、シェル環境に関するリポジトリを参照 してください。 これには、ログイン/対話型シェル、Xorg セッション、TTY、および SSH セッションが含まれます。

    /dev/tcp equivalent: ztcp

    Use the zsh/net/tcp module:

    $ zmodload zsh/net/tcp

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

    $ ztcp example.com 80

    Shortcut to exit shell on partial command line

    デフォルトではCtrl+d はコマンドラインが埋まるとシェルを閉めないが、これは修正されます:

    .X.S.A.  これでシェルを閉じることができます。zshrc
    exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh

    Third-party extensions

    Configuration frameworks

    Note: フレームワークは抽象化と複雑化のレベルを持っています。 それらは未定義の動作をもたらす可能性があり、またしばしばそうなる。
    • oh-my-zsh – 人気のある、コミュニティ主導の Zsh 設定を管理するフレームワークです。 9286>

    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

    Plugin managers

    • Antibody – Antigen に似たパフォーマンス重視のプラグインマネージャ。

    https://github.com/getantibody/antibody || antibodyAUR

    • zinit (以前の名前は “zplugin”) – 柔軟な Zsh プラグイン管理、クリーンな fpath、レポート、補完管理、ターボモード

    https://github.com/zdharma/zinit || zsh-zplugin-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 用の次世代プラグインマネージャ。 放棄

    https://github.com/zplug/zplug || zplugAUR

    Fish ライクな構文強調表示と自動提案

    Fish は非常に強力なシェル構文強調表示と自動提案機能を提供します。 Zsh で両方を使用するには、zsh-syntax-highlighting と zsh-autosuggestions をインストールし、最後に zshrc:

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

    The “command not found” handler

    Tango-go-next.pngThis article or section is a candidate for moving to #Tips and tricks.Tango-go-next.png

    Notes.B> Tips and tricks のセクションは、Zsh で使用できるようになりました。 pacman -F を使用したカスタム関数は “サードパーティ製拡張機能” ではありません。 pkgfile のものだけがこのセクションに属します。 (Discuss in Talk:Zsh#)

    pacman -F “command not found” handler

    pacman はあるファイルを含むパッケージを検索する機能を含んでいます。 以下の command-not-found ハンドラは、未知のコマンドが実行された時、マッチするパッケージを探すために pacman を直接使います。

    ~/.zshrc
    command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: command not found: %s' "$cmd" # コマンドが見つからなかったらすぐに表示、次にパッケージを探すfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#files} )); thenprintf '\r%s は以下のパッケージで見つかるかもしれません。\但し、"$cmd "ローカル res=() repo package version filefor file in "$files"; dores=("${(0)file}") repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s.*%s: /%ssn' "$repo" "$package" "$version" "$file "doneelseprintf '\n'fireturn 127}
    Note: pacman のファイルデータベースは通常の同期データベースとは別にあり、pacman -Fyを使って取得される必要があります。 詳しくは pacman#Search for a package that contains a specific file を見て下さい。

    pkgfile “command not found” handler

    pkgfile には、認識できないコマンドを入力すると自動的に pkgfile データベースを検索する command_not_found_handler 機能を持つ Zsh スクリプトファイルが含まれています。 例:

    ~/.zshrc
    source /usr/share/doc/pkgfile/command-not-found.zsh
    注記: この作業を行う前に、pkgfileデータベースを更新する必要がある場合があります。 詳細は pkgfile#Installation を参照してください。

    アンインストール

    zsh パッケージを削除する前にデフォルトシェルを変更する。

    Warning:

    以下のコマンドを実行します:

    $ chsh -s /bin/bash user

    ログインシェルとして zsh が設定されているすべてのユーザ (必要なら root も含む) に使用されます。

    あるいは、root で /etc/passwd を編集して、デフォルトのシェルを Bash に戻してください。

    警告。

    例えば、以下を変更します:

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

    これを変更します:

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

    See also

    .

コメントを残す

メールアドレスが公開されることはありません。