シェルインテグレーション

いくつかの Ghostty 機能はシェルとの統合を必要とします。Ghostty は bash、elvish、fish、nushell、zsh に対してシェルインテグレー ションを自動的に注入できます。

機能

  • カーソルがプロンプト位置にある端末は、閉じる前に確認しません。
  • 新しい端末は、直前にフォーカスされていた端末の 作業ディレクトリで開始します。
  • 複雑なプロンプトは、プロンプト行を reflow せずに redraw させることで 正しくリサイズします。
  • control(Linux)または command(macOS)を押しながらの トリプルクリックで、コマンドの 出力を選択できます。
  • プロンプト位置のカーソルはより標準的な テキスト編集を表す縦棒になります。
  • jump_to_prompt キーバインドを使うと、端末ウィンドウを プロンプトごとに前後にスクロールできます。
  • Alt+クリック(macOS では option+クリック)で、プロンプト上の クリックした位置に カーソルを移動できます。
  • sudo を自動的にラップして Ghostty の terminfo を保持 (既定では無効)
  • ssh を自動的にラップして、リモート端末の環境を 正しく設定。詳細は SSH を参照 (既定では無効)。

シェルインテグレーションの注入

Ghostty は bash、elvish、fish、 nushell、zsh に対し シェルインテグレーションのコードを自動注入します。

Note

macOS が同梱する Bash(/bin/bash)は 自動シェルインテグレーションに対応していません。シェル インテグレーションスクリプトを自分で読み込む (下記参照)必要があります。Homebrew などから通常版の Bash を インストールし、シェルとして設定してもよいです。

他のシェルにはシェルインテグレーションコードが用意されていません が、Ghostty 内ではそれらも問題なく動作します。ただし 上述した一部またはすべての シェルインテグレーション機能は 使えないかもしれません。

Nushell はこれらの機能の 多く(タイトルやカーソルの扱いなど)を 自身で備えているため、Nushell の Ghostty 統合は sudo、ssh-env、ssh-terminfo といった Ghostty 固有の機能に焦点を当てています。同様に新しいバージョンの Fish(4.0+) はプロンプトマーキングの組み込みサポートを持つため、jump_to_prompt、 プロンプトのリサイズ、 プロンプトの選択はシェルインテグレーションなしでも 動作します。

Ghostty は、実行するコマンドの basename に対する 単純な文字列照合でシェルを検出します。サポート シェルと別の名前で使っている場合は、 shell-integration 設定オプションで シェルインテグレーションを強制できます:

shell-integration = fish

自動シェルインテグレーションを無効化したい 場合:

shell-integration = none

シェルインテグレーションの検証

シェルインテグレーションが動作しているか確かめるには 、次のログ行を探してください:

info(io_exec): using Ghostty resources dir from env var: /Applications/Ghostty.app/Contents/Resources
info(io_exec): shell integration automatically injected shell=termio.shell_integration.Shell.fish

次のようなものが見つかった場合は、正常動作して いません。その主な原因は多くの場合、GHOSTTY_RESOURCES_DIR が正しい 場所を指していないことです。

ghostty terminfo not found, using xterm-256color
shell could not be detected, no automatic shell integration will be injected

トラブルシューティング

自動シェルインテグレーションを動作させるには、Ghostty を macOS アプリバンドルから実行するか、Ghostty の実行場所の 上位ディレクトリに zig-out/share の中身が ある場所に インストールされている必要があります。

Linux では、zig-out のディレクトリツリー(標準的な FHS ツリー)から実行するか、 -p 経由で適切にインストールされた場所から実行
した場合に自動的 にはたらきます(参照 ソースからのビルド)。

また、GHOSTTY_RESOURCES_DIR を手動で設定し、zig-out/share/ghostty の中身を 指せることもできます。このディレクトリの検証には、ファイル $GHOSTTY_RESOURCES_DIR/../terminfo/ghostty.terminfo の存在が必要です。 ただし、この環境変数を手動 で設定しなければならないということは、別のところに問題が あるということの赤 旗であり、 さらに調査してください。

手動シェルインテグレーション設定

シェルインテグレーションは、シェル設定の中で 手動で読み込むこともできます。これにより (Ghostty 内でシェルを切り替えるときな ど)、より多くのシナリオでシェル インテグレーションが使えることを保証します。

Ghostty は起動時に GHOSTTY_RESOURCES_DIR 環境変数を 自動的に設定します。これを使って (1) シェルが Ghostty 内で 起動されたことを検出し、(2) シェル インテグレーションのありかを 見つけられます。

たとえば bash の場合、~/.bashrc の 先頭に 次を書き ます:

# Ghostty shell integration for Bash. This should be at the top of your bashrc!
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
    builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
fi

Note

技術 的には、bashシェルインテグレーション スクリプトはどこからでも参照できますが、一部の bash 設定がでシェル インテグレーションを妨げる 可能性があります。これを回避するには、 シェル設定のなるべく早い段階で スクリプトをお読み込みください。

各シェルの インテグレーション手順はインラインで文書化されています:

シェルインテグレーション
bash${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash
elvish${GHOSTTY_RESOURCES_DIR}/shell-integration/elvish/lib/ghostty-integration.elv
fish"$GHOSTTY_RESOURCES_DIR"/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish
nushell$GHOSTTY_RESOURCES_DIR/shell-integration/nushell/vendor/autoload/ghostty.nu
zsh${GHOSTTY_RESOURCES_DIR}/shell-integration/zsh/ghostty-integration

シェル固有の詳細は shell-integration/README.md を参照してください。

シェルインテグレーションを使ったシェルの切り替え

前の節 で説明した自動シェルインテグレーションは、Ghostty 起動時の 最初に起動されたシェル でのみ機能 します。

Ghostty 内でシェルを切り替える場合、つまり手動で bash を実行するか 、nix-shell のようなコマンド を使うと、そのシェルでは シェル インテグレーションが失われます(元 のシェルプロセスでは引き続き機能します)。

これらのシナリオでシェルインテグレーション を機能させるには、前の節で説明した ように Ghostty 固有シェル のコードを手動で読み込む必要があります。

SSH インテグレーション

ssh-env と ssh-terminfo シェルインテグレーション 機能は、対話シェルの中の ssh を ラップし、Ghostty の +ssh CLI アクションを透過的に呼び出せるようにします。これにより 、ssh を介して 動作するアプリが正しく実行できるようリモート端末 環境を設定 します。

+ssh を対話シェルの外から直接使う方法 を含む詳細は SSH を 参照してください。