16 KiB
高度な設定
Starship は汎用性の高いシェルですが、時には特定の処理を行うために starship.toml
を編集する以上のことをする必要があります。 このページでは starship で使用される、より高度な設定の一部を詳しく説明していきます。
::: warning
ここに載せられた設定は、Starship の将来のリリースで変更される可能性があります。
:::
PowerShell の TransientPrompt
過去に出力されたプロンプトを置き換えることができます。 全ての情報が必要では無い時に役に立ちます。 有効にするには、 Enable-TransientPrompt
をシェルで実行してください。 $PROFILE
に追記することによって常時有効にすることが出来ます。 また、 Disable-TransientPrompt
によっていつでも無効化することが出来ます。
デフォルトでは、入力した文字列の左側を >
で置換します。 カスタマイズするには、関数を Invoke-Starship-TransientFunction
という名前で定義してください。 Starshipの character
モジュールを表示する場合はこのようにします:
function Invoke-Starship-TransientFunction {
&starship module character
}
Invoke-Expression (&starship init powershell)
Enable-TransientPrompt
Cmd の TransientPrompt と TransientRightPrompt
Clink を使うと直前に出力したプロント文字列をカスタマイズできます。 全ての情報が必要では無い時に役に立ちます。 有効化するには次のコマンドを実行します。 clink set prompt.transient <value>
。 <value> には次のいずれかの値を指定します。
always
: 直前に出力したプロンプト文字列を常に置換します。same_dir
: 作業ディレクトリが同じなら、直前に出力したプロンプト文字列を置換します。off
: プロンプト文字列を置換しません(無効化します)。
この操作が必要なのは1度だけです。 自分の starship.lua
を次のように編集すると、プロンプト文字列の左側や右側に出力する文字列を変更できます。
- デフォルトでは、入力した文字列の左側を
>
へ置換します。 カスタマイズするには、新しい関数starship_transient_prompt_func
を定義します。 この関数の受け取る引数は今のプロンプト文字列で、あなたが変更できるようになっています。 Starshipのcharacter
モジュールを表示する場合はこのようにします:
function starship_transient_prompt_func(prompt)
return io.popen("starship module character"
.." --keymap="..rl.getvariable('keymap')
):read("*a")
end
load(io.popen('starship init cmd'):read("*a"))()
- デフォルトでは、入力した文字列の右側は空です。 カスタマイズするには、新しい関数
starship_transient_rprompt_func
を定義します。 この関数の受け取る引数は今のプロンプト文字列で、あなたが変更できるようになっています。 例えば、直前のコマンドを実行した時刻を表示するには次のようにします。
function starship_transient_rprompt_func(prompt)
return io.popen("starship module time"):read("*a")
end
load(io.popen('starship init cmd'):read("*a"))()
Fish の TransientPrompt と TransientRightPrompt
過去に出力されたプロンプトを置き換えることができます。 全ての情報が必要では無い時に役に立ちます。 To enable this, run enable_transience
in the shell session. To make it permanent, put this statement in your ~/.config/fish/config.fish
. Transience can be disabled on-the-fly with disable_transience
.
Note that in case of Fish, the transient prompt is only printed if the commandline is non-empty, and syntactically correct.
- By default, the left side of input gets replaced with a bold-green
❯
. カスタマイズするには、新しい関数starship_transient_prompt_func
を定義します。 Starshipのcharacter
モジュールを表示する場合はこのようにします:
function starship_transient_prompt_func
starship module character
end
starship init fish | source
enable_transience
- デフォルトでは、入力した文字列の右側は空です。 カスタマイズするには、新しい関数
starship_transient_rprompt_func
を定義します。 例えば、直前のコマンドを実行した時刻を表示するには次のようにします。
function starship_transient_rprompt_func
starship module time
end
starship init fish | source
enable_transience
TransientPrompt and TransientRightPrompt in Bash
The Ble.sh framework at v0.4 or higher allows you to replace the previous-printed prompt with custom strings. This is useful in cases where all the prompt information is not always needed. To enable this, put this in ~/.bashrc
bleopt prompt_ps1_transient=<value>
:
The <value> here is a colon-separated list of always
, same-dir
and trim
. When prompt_ps1_final
is empty and this option has a non-empty value, the prompt specified by PS1
is erased on leaving the current command line. If the value contains a field trim
, only the last line of multiline PS1
is preserved and the other lines are erased. Otherwise, the command line will be redrawn as if PS1=
is specified. When a field same-dir
is contained in the value and the current working directory is different from the final directory of the previous command line, this option prompt_ps1_transient
is ignored.
Make the following changes to your ~/.bashrc
to customize what gets displayed on the left and on the right:
- To customize what the left side of input gets replaced with, configure the
prompt_ps1_final
Ble.sh option. For example, to display Starship'scharacter
module here, you would do
bleopt prompt_ps1_final="$(starship module character)"
- To customize what the right side of input gets replaced with, configure the
prompt_rps1_final
Ble.sh option. 例えば、直前のコマンドを実行した時刻を表示するには次のようにします。
bleopt prompt_rps1_final="$(starship module time)"
Cmdのカスタムの事前プロンプトおよび事前実行コマンド
Clinkはプロンプト表示前と実行前にCmd shellコマンドを実行するための非常に柔軟なAPIを提供します。 It is fairly simple to use with Starship. Make the following changes to your starship.lua
file as per your requirements:
- To run a custom function right before the prompt is drawn, define a new function called
starship_preprompt_user_func
. This function receives the current prompt as a string that you can utilize. For example, to draw a rocket before the prompt, you would do
function starship_preprompt_user_func(prompt)
print("🚀")
end
load(io.popen('starship init cmd'):read("*a")()
- To run a custom function right before a command is executed, define a new function called
starship_precmd_user_func
. This function receives the current commandline as a string that you can utilize. For example, to print the command that's about to be executed, you would do
function starship_precmd_user_func(line)
print("Executing: "..line)
end
load(io.popen('starship init cmd'):read("*a"))()
Bashのカスタムの事前プロンプトおよび事前実行コマンド
Bashには、他のほとんどのシェルとは違い、正式な preexec / precmd フレームワークを持っていません。 そのため、 bash
で完全にカスタマイズ可能なフックを提供することは困難です。 ただし、Starship はプロンプトを描画する一連の流れに、限定的に独自の関数を挿入することができます。
- 関数をプロンプトが描画される直前に実行するためには、新しい関数を定義して
starship_precmd_user_func
に割り当ててください。 例として、ロケットをプロンプトの前に表示させたければ、下記のようにしてください。
function blastoff(){
echo "🚀"
}
starship_precmd_user_func="blastoff"
- コマンドの直前に関数を実行するために、
DEBUG
トラップの仕組みを使うことができます。 However, you must trap the DEBUG signal before initializing Starship! Starship は DEBUGトラップの値を保護できますが、 starship の起動後にトラップが上書きされると、いくつかの機能は壊れてしまうでしょう。
function blastoff(){
echo "🚀"
}
trap blastoff DEBUG # Trap DEBUG *before* running starship
set -o functrace
eval $(starship init bash)
set +o functrace
Custom pre-prompt and pre-execution Commands in PowerShell
PowerShell does not have a formal preexec/precmd framework like most other shells. そのため、powershell
で完全にカスタマイズ可能なフックを提供することは困難です。 ただし、Starship はプロンプトを描画する一連の流れに、限定的に独自の関数を挿入することができます。
Create a function named Invoke-Starship-PreCommand
function Invoke-Starship-PreCommand {
$host.ui.Write("🚀")
}
ウィンドウのタイトルの変更
いくつかのシェルプロンプトはあなたのためにウィンドウのタイトルを自動的に変更します(例えば、カレントディレクトリを反映するために)。 特に Fish はデフォルトで変更を行います。 Starship does not do this, but it's fairly straightforward to add this functionality to bash
, zsh
, cmd
or powershell
.
まず、ウィンドウのタイトルを変更する関数を定義してください( bash も zsh も同様に)
function set_win_title(){
echo -ne "\033]0; YOUR_WINDOW_TITLE_HERE \007"
}
タイトルをカスタマイズするために変数を利用することができます ($USER
、 $HOSTNAME
、 $PWD
が一般的です)。
bash
では関数を starship の precmd 関数としてセットしてください。
starship_precmd_user_func="set_win_title"
zsh
では関数を precmd_functions
の配列に追加してください。
precmd_functions+=(set_win_title)
もし結果に満足したら、永続化のためそれぞれの行をシェルの設定ファイル (~/.bashrc
もしくは ~/.zshrc
) に追加してください。
たとえば、現在のディレクトリをターミナルタブのタイトルに表示したい場合は、 ~/.bashrc
または~/.zshrc
に以下のスニペットを追加します。
function set_win_title(){
echo -ne "\033]0; $(basename "$PWD") \007"
}
starship_precmd_user_func="set_win_title"
For Cmd, you can change the window title using the starship_preprompt_user_func
function.
function starship_preprompt_user_func(prompt)
console.settitle(os.getenv('USERNAME').."@"..os.getenv('COMPUTERNAME')..": "..os.getcwd())
end
load(io.popen('starship init cmd'):read("*a"))()
You can also set a similar output with PowerShell by creating a function named Invoke-Starship-PreCommand
.
# edit $PROFILE
function Invoke-Starship-PreCommand {
$host.ui.RawUI.WindowTitle = "$env:USERNAME@$env:COMPUTERNAME`: $pwd `a"
}
Invoke-Expression (&starship init powershell)
右プロンプトの有効化
シェルによっては、入力と同じ行にレンダリングされる右プロンプトをサポートしています。 Starship では right_format
オプションを使って右プロンプトの内容を設定できます。 format
で使用できるモジュールはすべてright_format
でも使用できます。 変数$all
には、format
やright_format
で明示的に使用されていないモジュールのみが格納されます。
注意: 右プロンプトは入力の場所に続く単一の行です。 To right align modules above the input line in a multi-line prompt, see the fill
module.
right_format
is currently supported for the following shells: elvish, fish, zsh, xonsh, cmd, nushell, bash.
Note: The Ble.sh framework v0.4 or higher should be installed in order to use right prompt in bash.
設定例
# ~/.config/starship.toml
# A minimal left prompt
format = """$character"""
# move the rest of the prompt to the right
right_format = """$all"""
次のようなプロンプトが生成されます:
▶ starship on rprompt [!] is 📦 v0.57.0 via 🦀 v1.54.0 took 17s
Continuation Prompt
Some shells support a continuation prompt along with the normal prompt. This prompt is rendered instead of the normal prompt when the user has entered an incomplete statement (such as a single left parenthesis or quote).
Starship can set the continuation prompt using the continuation_prompt
option. The default prompt is '[∙](bright-black) '
.
Note: continuation_prompt
should be set to a literal string without any variables.
Note: Continuation prompts are only available in the following shells:
bash
zsh
PowerShell
設定例
# ~/.config/starship.toml
# A continuation prompt that displays two filled in arrows
continuation_prompt = '▶▶ '
スタイルの設定
スタイル文字列は空白で区切られた単語のリストです。 大文字小文字を区別しません(例えば、 bold
とBoLd
は同じだとみなされます)。 それぞれ以下のいずれか一つが該当します。
bold
italic
underline
dimmed
inverted
blink
hidden
strikethrough
bg:<color>
fg:<color>
<color>
none
ここで、 <color>
は色を指定します(以下で述べます)。 現在 fg:<color>
と <color>
は同様の動作ですが、将来変更される可能性があります。 inverted
は背景と前景の色を交換します。 文字列中の単語の順序は関係ありません。
none
トークンは、文字列中のbg:
指定子の一部でない場合、他のすべてのトークンをオーバーライドします。そのため、たとえば、fg:red none fg:blue
と指定した場合、スタイルなしの文字列が作られます。 bg:none
は背景色をデフォルトの色にセットするので、fg:red bg:none
は red
や fg:red
と同じ意味になり、bg:green fg:red bg:none
も fg:red
や red
と同じ意味になります。 将来 none
を他の単語と一緒に使用することはエラーになるかもしれません。
色は以下のいずれか1つを指定できます。
- 標準的なターミナルカラーの
black
、red
、green
、blue
、yellow
、purple
、cyan
、white
。 必要に応じて、より明るい色を得るためにbright-
を前につけることができます。(例えば、bright-white
) #
に続く16進数。 RGB の16進数カラーコードを表します。- 0-255 までの間の数字。 8-bit ANSI カラーコード を表します。
複数の色が文字色/背景色に指定された際には、最後の指定が優先して選ばれます。
Not every style string will be displayed correctly by every terminal. In particular, the following known quirks exist:
- Many terminals disable support for
blink
by default hidden
is not supported on iTerm.strikethrough
is not supported by the default macOS Terminal.app