「Fish」の版間の差分
(未訳部分の翻訳) |
(同期) |
||
4行目: | 4行目: | ||
[[en:Fish]] |
[[en:Fish]] |
||
[[ru:Fish]] |
[[ru:Fish]] |
||
− | '''fish''' ('''friendly interactive shell''') は主に対話的に使用することを意図されたユーザフレンドリーなコマンドラインシェルです。 |
+ | '''fish''' ('''friendly interactive shell''') は主に対話的に使用することを意図されたユーザフレンドリーな[[コマンドラインシェル]]です。 |
== インストール == |
== インストール == |
||
− | [[公式リポジトリ]]より |
+ | [[公式リポジトリ]]より {{Pkg|fish}} パッケージを[[pacman|インストール]]できます。開発版は {{AUR|fish-git}} パッケージでインストールできます。 |
+ | fish をデフォルトシェルにしたい場合は、[[シェル#デフォルトシェルを変更する]]を見てください。ただし、[[#fish をデフォルトシェルに設定しない|fish はデフォルトシェルにしない]]ことを推奨します。 |
||
− | 最新の開発版は [[AUR]] より {{AUR|fish-shell-git}}{{Broken package link|{{aur-mirror|fish-shell-git}}}} を[[pacman|インストール]]します。 |
||
+ | インストールしたら {{ic|fish}} を実行することで fish シェルが起動します。 |
||
− | 2011年に [https://github.com/liljencrantz オリジナルの開発者] による [http://www.mail-archive.com/fish-users@lists.sourceforge.net/msg02893.html 開発が中止された] 従来のバージョンは [[AUR]] より {{AUR|fish-git}} を[[pacman|インストール]]します。 |
||
+ | ドキュメントは fish から {{ic|help}} を実行することでウェブブラウザが開いて確認できます。fish の構文は他のシェルと異なっているので、最低でも "Syntax overview" セクションを読むことを推奨します。 |
||
− | fish をデフォルトシェルにするには、{{ic|chsh -s /usr/bin/fish}} を実行します。 |
||
== 入出力 == |
== 入出力 == |
||
81行目: | 81行目: | ||
選択した設定は、個人用の設定ファイルに書き込まれます。また、定義された関数と履歴を表示することができます。 |
選択した設定は、個人用の設定ファイルに書き込まれます。また、定義された関数と履歴を表示することができます。 |
||
− | |||
− | === プロンプト === |
||
− | |||
− | git ディレクトリにいるときにブランチやダーティな状態を fish に表示してほしい場合、以下を {{ic|~/.config/fish/config.fish}} に追加します: |
||
− | {{bc|<nowiki> |
||
− | # fish git prompt |
||
− | set __fish_git_prompt_showdirtystate 'yes' |
||
− | set __fish_git_prompt_showstashstate 'yes' |
||
− | set __fish_git_prompt_showupstream 'yes' |
||
− | set __fish_git_prompt_color_branch yellow |
||
− | |||
− | # Status Chars |
||
− | set __fish_git_prompt_char_dirtystate '⚡' |
||
− | set __fish_git_prompt_char_stagedstate '→' |
||
− | set __fish_git_prompt_char_stashstate '↩' |
||
− | set __fish_git_prompt_char_upstream_ahead '↑' |
||
− | set __fish_git_prompt_char_upstream_behind '↓' |
||
− | |||
− | function fish_prompt |
||
− | set last_status $status |
||
− | set_color $fish_color_cwd |
||
− | printf '%s' (prompt_pwd) |
||
− | set_color normal |
||
− | printf '%s ' (__fish_git_prompt) |
||
− | set_color normal |
||
− | end |
||
− | </nowiki>}} |
||
=== コマンド補完 === |
=== コマンド補完 === |
||
119行目: | 92行目: | ||
fish の開発元のポリシーが、上流の tarball に存在する補完を全て含めるというものなので ''pacman'', ''pacman-key'', ''makepkg'', ''cower'', ''pbget'', ''pacmatic'' などの Arch Linux 固有のコマンドの文脈に沿った補完も fish に含まれています。メモリ管理が賢いために、リソースに悪影響を与えることはありません。 |
fish の開発元のポリシーが、上流の tarball に存在する補完を全て含めるというものなので ''pacman'', ''pacman-key'', ''makepkg'', ''cower'', ''pbget'', ''pacmatic'' などの Arch Linux 固有のコマンドの文脈に沿った補完も fish に含まれています。メモリ管理が賢いために、リソースに悪影響を与えることはありません。 |
||
+ | ==Tips and Tricks== |
||
− | === /etc/profile と ~/.profile の互換性 === |
||
+ | === fish をデフォルトシェルに設定しない === |
||
− | POSIX 標準の {{ic|sh}} の構文は fish と互換性がないため、fish では {{ic|/etc/profile}} (そして {{ic|/etc/profile.d}} の {{ic|*.sh}} ファイル) や {{ic|~/.profile}} を source することはできません。 |
||
+ | Arch ではシェルスクリプトは [[Bash]] を使って書かれており、fish と完全な互換性がありません。fish をデフォルトシェルに設定しないことで、起動時に実行される Bash スクリプトで環境変数を正しく設定できます。また、fish などの Bash 非互換のターミナルを使った場合に起こる問題を避けられます。デフォルトシェルを fish に設定するとスクリプトエラーが発生します。以下では fish をデフォルトシェルに設定しないで使用する方法を説明しています。 |
||
− | これらのファイルを fish で source したい場合、[[dash]] をインストールして以下の行を {{ic|config.fish}} に追加してください: |
||
− | env -i HOME=$HOME dash -l -c printenv | sed -e '/PATH/s/:/ /g;s/=/ /;s/^/set -x /' | source |
||
+ | ==== .bashrc から fish を起動する ==== |
||
− | 組み込まれているコマンドを使うことで実行ファイルの呼び出しを省くこともできます: |
||
− | env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source |
||
+ | デフォルトシェルを Bash のままにしておいて {{ic|exec fish}} という行を[[Bash#設定ファイル|シェルの設定ファイル]] (例: {{ic|.bashrc}}) に追加してください。これで Bash が {{ic|/etc/profile}} や {{ic|/etc/profile.d}} のファイルを正しく読み込んでくれます。''fish'' は bash のプロセスを置き換えるため、''fish'' を終了するとターミナルも終了します。ローカルマシンだけでなく SSH サーバーでも使える方法のため、以下で説明する方法よりも汎用的です。 |
||
− | ==Tips and Tricks== |
||
− | ===履歴置換=== |
||
− | Fish は履歴置換 (例: {{ic|sudo !!}}) を実装しておらず、fish の開発者は [http://fishshell.com/docs/current/faq.html#faq-history 実装する予定もない] と発言しています。しかしながら、履歴置換は多くのユーザーにとって必要不可欠な機能です。Reddit ユーザーの [http://www.reddit.com/u/crossroads1112 crossroads1112] が履歴置換の機能を再現した関数を作成しています (ただし構文は異なっています)。関数は [https://gist.github.com/crossroads1112/77badb2c3455e23b873b github] にあり、使い方はコメントとして書いてあります。オリジナルの構文に近づけた [https://gist.github.com/b-/981892a65837ab0a387e フォークバージョン] も存在し、ヘルパー関数でコマンドを指定すれば {{ic|command !!}} が使えます。 |
||
+ | {{Tip|{{ic|bash --norc}} を使うと上記の設定の後、fish が立ち上がらず bash に手動で入ります。}} |
||
− | == トラブルシューティング == |
||
+ | |||
+ | ==== ターミナルエミュレータのオプションを使用する ==== |
||
− | + | fish を起動するコマンドラインオプションを使用してターミナルエミュレータを開くという方法もあります。大抵のターミナルでは {{ic|-e}} スイッチを使います。例えば fish を使用して gnome-terminal を開くには、ショートカットを以下のように変更してください: |
|
gnome-terminal -e fish |
gnome-terminal -e fish |
||
− | + | シェルの設定をサポートしていない LilyTerm などの軽量ターミナルエミュレータでは以下のように設定してください: |
|
SHELL=/usr/bin/fish lilyterm |
SHELL=/usr/bin/fish lilyterm |
||
− | ターミナルの設定 |
+ | ターミナルの設定からターミナルのデフォルトシェルを fish に設定できたり、ターミナルエミュレータにプロファイル機能がある場合、ターミナルプロファイルで設定できることがあります。 |
+ | どちらにしてもターミナルエミュレータを開いたら、fish が起動するようになります。 |
||
− | tmux で起動するシェルとして fish を設定するには、{{ic|~/.tmux.conf}} に以下を記述: |
||
+ | |||
+ | ==== ターミナルマルチプレクサのオプションを使用する ==== |
||
+ | |||
+ | [[tmux]] で起動するシェルを fish に設定するには、以下を {{ic|~/.tmux.conf}} に記述してください: |
||
set-option -g default-shell "/usr/bin/fish" |
set-option -g default-shell "/usr/bin/fish" |
||
+ | ''tmux'' を起動すると fish が立ち上がるようになります。 |
||
− | システム全体のデフォルトシェルとして fish を設定しないことで、起動時に arch スクリプトを動作させることができ、環境変数は正しく設定され、その他、fish などの Bash と互換性がないターミナルを使用することによる問題を少なくすることが可能です。 |
||
+ | |||
+ | === fish をデフォルトシェルに設定する === |
||
− | fish をデフォルトシェルとして設定した場合、パスが正しく設定されていないことに気づくでしょう。{{ic|~/.config/fish/config.fish}} にセクションを追加してログイン時にパスを適切に設定することができます。ログインシェルの場合だけ実行される {{ic|.profile}} や {{ic|.bash_profile}} と同じです。 |
+ | fish をデフォルトシェルとして設定した場合、パスが正しく設定されていないことに気づくでしょう。{{ic|~/.config/fish/config.fish}} ファイルにセクションを追加してログイン時にパスを適切に設定することができます。ログインシェルの場合だけ実行される {{ic|.profile}} や {{ic|.bash_profile}} と同じです。 |
{{bc| |
{{bc| |
||
159行目: | 136行目: | ||
}} |
}} |
||
− | {{ic|$MOZ_PLUGIN_PATH}} など、他の環境変数も手動で追加する必要があります。fish をデフォルトシェルとしてシームレスに使えるようにするには骨が折れる作業量になります。 |
+ | {{Note|{{ic|$MOZ_PLUGIN_PATH}} など、他の環境変数も手動で追加する必要があります。fish をデフォルトシェルとしてシームレスに使えるようにするには骨が折れる作業量になります。[[#fish をデフォルトシェルに設定しない|fish をデフォルトシェルに設定しない]]方が簡単です。}} |
+ | ===グリーティングを無効化=== |
||
− | === su で bash が起動する === |
||
+ | デフォルトでは、fish は起動時にグリーティングメッセージを表示します。無効にするには、fish の設定ファイルに {{ic|set fish_greeting}} と追加してください。 |
||
− | su で bash が起動する場合 (Bash がデフォルトシェルのため)、fish に関数を定義してください: |
||
+ | |||
+ | === su で fish を起動する === |
||
+ | |||
+ | ''su'' で Bash が起動する場合、fish の設定ファイルに以下の関数を定義します: |
||
− | $ funced su |
||
function su |
function su |
||
− | + | /bin/su --shell=/usr/bin/fish $argv |
|
end |
end |
||
− | $ funcsave su |
||
=== ログイン時に X を起動 === |
=== ログイン時に X を起動 === |
||
− | {{ic|~/.config/fish/config.fish}} の |
+ | 以下を {{ic|~/.config/fish/config.fish}} の最後に追加してください: |
{{bc|1=<nowiki> |
{{bc|1=<nowiki> |
||
# start X at login |
# start X at login |
||
if status --is-login |
if status --is-login |
||
− | if test -z "$DISPLAY" -a $XDG_VTNR -eq 1 |
+ | if test -z "$DISPLAY" -a "$XDG_VTNR" -eq "1" |
− | exec startx |
+ | exec startx |
end |
end |
||
end |
end |
||
</nowiki>}} |
</nowiki>}} |
||
+ | === liquidprompt を使う === |
||
− | {{Note|fish 使用時に {{ic|startx}} が {{ic|-keeptty}} フラグを必要とする理由については [https://github.com/fish-shell/fish-shell/issues/1772 この記事] を参照してください。}} |
||
+ | |||
+ | [https://github.com/nojhan/liquidprompt Liquidprompt] は Bash と Zsh 用に作られたフル機能の人気のあるアダプティブプロンプトですが fish に対応する予定はありません [https://github.com/nojhan/liquidprompt/pull/230]。[https://github.com/wesbarnett/fish-lp fish-lp プロジェクト] は fish で Liquidprompt を実装しています。 |
||
+ | |||
+ | === プロンプトに git の状態を表示する === |
||
+ | |||
+ | カレントディレクトリが git ディレクトリの場合に fish でブランチなどの状態を表示するには、以下を {{ic|~/.config/fish/config.fish}} に追加します: |
||
+ | {{bc|<nowiki> |
||
+ | # fish git prompt |
||
+ | set __fish_git_prompt_showdirtystate 'yes' |
||
+ | set __fish_git_prompt_showstashstate 'yes' |
||
+ | set __fish_git_prompt_showupstream 'yes' |
||
+ | set __fish_git_prompt_color_branch yellow |
||
+ | |||
+ | # Status Chars |
||
+ | set __fish_git_prompt_char_dirtystate '⚡' |
||
+ | set __fish_git_prompt_char_stagedstate '→' |
||
+ | set __fish_git_prompt_char_stashstate '↩' |
||
+ | set __fish_git_prompt_char_upstream_ahead '↑' |
||
+ | set __fish_git_prompt_char_upstream_behind '↓' |
||
+ | |||
+ | function fish_prompt |
||
+ | set last_status $status |
||
+ | set_color $fish_color_cwd |
||
+ | printf '%s' (prompt_pwd) |
||
+ | set_color normal |
||
+ | printf '%s ' (__fish_git_prompt) |
||
+ | set_color normal |
||
+ | end |
||
+ | </nowiki>}} |
||
+ | |||
+ | === ssh-agent の評価 === |
||
+ | |||
+ | fish では適切な変数が設定されていないため {{ic|eval (ssh-agent)}} を実行するとエラーが生成されます。この問題を解決するには、csh 風のオプションである {{ic|-c}} を使ってください: |
||
+ | |||
+ | $ eval (ssh-agent -c) |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | ===履歴置換=== |
||
+ | Fish は履歴置換 (例: {{ic|sudo !!}}) を実装しておらず、fish の開発者は [http://fishshell.com/docs/current/faq.html#faq-history 実装する予定もない] と発言しています。しかしながら、履歴置換は多くのユーザーにとって必要不可欠な機能です。Reddit ユーザーの [http://www.reddit.com/u/crossroads1112 crossroads1112] が履歴置換の機能を再現した関数を作成しています (ただし構文は異なっています)。関数は [https://gist.github.com/crossroads1112/77badb2c3455e23b873b github] にあり、使い方はコメントとして書いてあります。オリジナルの構文に近づけた [https://gist.github.com/b-/981892a65837ab0a387e フォークバージョン] も存在し、ヘルパー関数でコマンドを指定すれば {{ic|command !!}} が使えます。 |
||
== 参照 == |
== 参照 == |
||
* http://fishshell.com/ - ホームページ |
* http://fishshell.com/ - ホームページ |
||
− | * http://fishshell.com/docs/ |
+ | * http://fishshell.com/docs/current/index.html - ドキュメント |
2016年11月6日 (日) 20:04時点における版
fish (friendly interactive shell) は主に対話的に使用することを意図されたユーザフレンドリーなコマンドラインシェルです。
インストール
公式リポジトリより fish パッケージをインストールできます。開発版は fish-gitAUR パッケージでインストールできます。
fish をデフォルトシェルにしたい場合は、シェル#デフォルトシェルを変更するを見てください。ただし、fish はデフォルトシェルにしないことを推奨します。
インストールしたら fish
を実行することで fish シェルが起動します。
ドキュメントは fish から help
を実行することでウェブブラウザが開いて確認できます。fish の構文は他のシェルと異なっているので、最低でも "Syntax overview" セクションを読むことを推奨します。
入出力
ファイル記述子
他のシェルと同じように、入出力ストリームをリダイレクトすることが fish でも出来ます。テキストファイルを使ってプログラムのエラー出力を保存したり、テキストファイルを入力したりする場合に有用です。ほとんどのプログラムは3つの入出力ストリームを使います。ファイル記述子 (FD) と呼ばれる番号で表されます:
- 標準入力 (FD 0) は読み取りに使われます (デフォルトではキーボード)。
- 標準出力 (FD 1) は書き込みに使われます (デフォルトではスクリーン)。
- 標準エラー (FD 2) はエラーや警告の表示に使われます (デフォルトではスクリーン)。
リダイレクト
リダイレクトという仕組みを使うことでファイル記述子の出力先を他のファイルに変えることができます:
標準入力をリダイレクト: $ command < source_file 標準出力をリダイレクト: $ command > destination 既存のファイルに標準出力を追記: $ command >> destination 標準エラーをリダイレクト: $ command ^ destination 既存のファイルに標準エラーを追記: $ command ^^ destination
destination
には以下のどれかを使えます:
- ファイル名 (出力は指定されたファイルに書き込まれます)。
&
と他のファイル記述子の番号。出力は他のファイル記述子に書き込まれます。&
と-
記号。出力はどこにも書き込まれません。
例:
標準出力をファイルにリダイレクト: $ command > destination_file.txt 標準出力と標準出力の両方を同じファイルにリダイレクト: $ command > destination_file.txt ^ &1 標準出力を消す: $ command > &-
パイプ
あるコマンドの標準出力を次のコマンドの標準入力にリダイレクトすることができます。パイプ文字 (|
) を使ってコマンドを区切って下さい。例:
cat example.txt | head
(標準出力だけでなく) 他のファイル記述子をパイプにリダイレクトすることもできます。次の例では、標準エラーのファイル記述子の番号と >
をパイプに付けることで、あるコマンドの標準エラーを他のコマンドの標準入力に流し込んでいます:
$ command 2>| less
上記を実行すると command
が実行されてから標準エラーが less
コマンドにリダイレクトされます。
設定
fish のユーザー設定ファイルは ~/.config/fish/config.fish
に存在しています。.bashrc
と同じように、ターミナルが開かれる時に実行/定義するコマンド、関数を追加します。
ウェブインターフェイス
fish のプロンプトとターミナルの色はウェブインターフェイスで対話的に設定できます:
fish_config
選択した設定は、個人用の設定ファイルに書き込まれます。また、定義された関数と履歴を表示することができます。
コマンド補完
fish は man ページから自動補完を生成できます。~/.config/fish/generated_completions/
に補完が書き込まれており、以下を呼び出すことによって生成することができます:
fish_update_completions
また、独自の補完を ~/.config/fish/completions/
に定義できます。/usr/share/fish/completions/
でいくつかの例を見ることができます。
fish の開発元のポリシーが、上流の tarball に存在する補完を全て含めるというものなので pacman, pacman-key, makepkg, cower, pbget, pacmatic などの Arch Linux 固有のコマンドの文脈に沿った補完も fish に含まれています。メモリ管理が賢いために、リソースに悪影響を与えることはありません。
Tips and Tricks
fish をデフォルトシェルに設定しない
Arch ではシェルスクリプトは Bash を使って書かれており、fish と完全な互換性がありません。fish をデフォルトシェルに設定しないことで、起動時に実行される Bash スクリプトで環境変数を正しく設定できます。また、fish などの Bash 非互換のターミナルを使った場合に起こる問題を避けられます。デフォルトシェルを fish に設定するとスクリプトエラーが発生します。以下では fish をデフォルトシェルに設定しないで使用する方法を説明しています。
.bashrc から fish を起動する
デフォルトシェルを Bash のままにしておいて exec fish
という行をシェルの設定ファイル (例: .bashrc
) に追加してください。これで Bash が /etc/profile
や /etc/profile.d
のファイルを正しく読み込んでくれます。fish は bash のプロセスを置き換えるため、fish を終了するとターミナルも終了します。ローカルマシンだけでなく SSH サーバーでも使える方法のため、以下で説明する方法よりも汎用的です。
ターミナルエミュレータのオプションを使用する
fish を起動するコマンドラインオプションを使用してターミナルエミュレータを開くという方法もあります。大抵のターミナルでは -e
スイッチを使います。例えば fish を使用して gnome-terminal を開くには、ショートカットを以下のように変更してください:
gnome-terminal -e fish
シェルの設定をサポートしていない LilyTerm などの軽量ターミナルエミュレータでは以下のように設定してください:
SHELL=/usr/bin/fish lilyterm
ターミナルの設定からターミナルのデフォルトシェルを fish に設定できたり、ターミナルエミュレータにプロファイル機能がある場合、ターミナルプロファイルで設定できることがあります。
どちらにしてもターミナルエミュレータを開いたら、fish が起動するようになります。
ターミナルマルチプレクサのオプションを使用する
tmux で起動するシェルを fish に設定するには、以下を ~/.tmux.conf
に記述してください:
set-option -g default-shell "/usr/bin/fish"
tmux を起動すると fish が立ち上がるようになります。
fish をデフォルトシェルに設定する
fish をデフォルトシェルとして設定した場合、パスが正しく設定されていないことに気づくでしょう。~/.config/fish/config.fish
ファイルにセクションを追加してログイン時にパスを適切に設定することができます。ログインシェルの場合だけ実行される .profile
や .bash_profile
と同じです。
if status --is-login set PATH $PATH /usr/bin /sbin end
グリーティングを無効化
デフォルトでは、fish は起動時にグリーティングメッセージを表示します。無効にするには、fish の設定ファイルに set fish_greeting
と追加してください。
su で fish を起動する
su で Bash が起動する場合、fish の設定ファイルに以下の関数を定義します:
function su /bin/su --shell=/usr/bin/fish $argv end
ログイン時に X を起動
以下を ~/.config/fish/config.fish
の最後に追加してください:
# start X at login if status --is-login if test -z "$DISPLAY" -a "$XDG_VTNR" -eq "1" exec startx end end
liquidprompt を使う
Liquidprompt は Bash と Zsh 用に作られたフル機能の人気のあるアダプティブプロンプトですが fish に対応する予定はありません [1]。fish-lp プロジェクト は fish で Liquidprompt を実装しています。
プロンプトに git の状態を表示する
カレントディレクトリが git ディレクトリの場合に fish でブランチなどの状態を表示するには、以下を ~/.config/fish/config.fish
に追加します:
# fish git prompt set __fish_git_prompt_showdirtystate 'yes' set __fish_git_prompt_showstashstate 'yes' set __fish_git_prompt_showupstream 'yes' set __fish_git_prompt_color_branch yellow # Status Chars set __fish_git_prompt_char_dirtystate '⚡' set __fish_git_prompt_char_stagedstate '→' set __fish_git_prompt_char_stashstate '↩' set __fish_git_prompt_char_upstream_ahead '↑' set __fish_git_prompt_char_upstream_behind '↓' function fish_prompt set last_status $status set_color $fish_color_cwd printf '%s' (prompt_pwd) set_color normal printf '%s ' (__fish_git_prompt) set_color normal end
ssh-agent の評価
fish では適切な変数が設定されていないため eval (ssh-agent)
を実行するとエラーが生成されます。この問題を解決するには、csh 風のオプションである -c
を使ってください:
$ eval (ssh-agent -c)
トラブルシューティング
履歴置換
Fish は履歴置換 (例: sudo !!
) を実装しておらず、fish の開発者は 実装する予定もない と発言しています。しかしながら、履歴置換は多くのユーザーにとって必要不可欠な機能です。Reddit ユーザーの crossroads1112 が履歴置換の機能を再現した関数を作成しています (ただし構文は異なっています)。関数は github にあり、使い方はコメントとして書いてあります。オリジナルの構文に近づけた フォークバージョン も存在し、ヘルパー関数でコマンドを指定すれば command !!
が使えます。
参照
- http://fishshell.com/ - ホームページ
- http://fishshell.com/docs/current/index.html - ドキュメント