fish shellのはじめかた 2019冬
PONOS Advent Calendar 2019の1日目の記事です。
⛄はじめに
fish shellは「Friendly interactive shell」の略で、bashとはzshの代替として使えるコマンドラインシェルです。他のシェルと比べてかな〜り後発なこともあって、初期状態でも十分高機能かつ使いやすく作られています。
この記事では、fish本体とパッケージマネージャ・カスタマイズ方法についてサラッと解説し、初fishの方がとりあえず使えるようになることを目指します。
この記事の対象者
- デフォルトのシェルを使い続けていて、そろそろ変えてみたい人
- fish shellを使ったことがない人
- fish shellを試したことがあるけど、色々忘れちゃった人
- 魚が好きな人
🐟fish本体の導入
fishをインストールする
公式サイトのトップページに、各OSごとのインストール方法が載っています。
とりあえず使ってみる
適当なターミナルでおもむろに fish
と打ってみましょう。
bash-3.2$ fish
Welcome to fish, the friendly interactive shell
[email protected] ~>
exit
すれば元のシェルに戻れます。
ログインシェルをfishにする
fishが気に入ってきたら、ログインシェルもfishに変更しましょう。
~> which fish
/usr/local/bin/fish
fishの実行ファイルがどこにいるのか調べて、
~> chsh -s /usr/local/bin/fish
chsh
で変更します。
📦パッケージマネージャ
プログラミング言語のように、fishにもパッケージマネージャがあります。何種類かありますが、オススメはFisher(旧名Fisherman)です。
fishfile
という名前のファイルでパッケージを管理できるので、シェルの設定をgit管理している人にはとても便利です。
Fisherをインストールする
FisherのREADMEに載っているワンライナーでインストールします。(インストールと言っても、ファイルを1つ置いているだけです。)
curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
ターミナルを再起動して、叩いてみます。
~> fisher -v
fisher version 3.2.10 ~/.config/fish/functions/fisher.fish
インストールできました。
パッケージをインストールする
fisher add [GitHubリポジトリ名]
でパッケージをインストールできます。(正確には、fishfile
に追加→反映を一気にやっているみたいです。)
例えばjethrokuan/zをインストールする場合は、以下のようになります。
~> fisher add jethrokuan/z
created new fishfile in ~/.config/fish/fishfile
fetching https://codeload.github.com/jethrokuan/z/tar.gz/master
linking ~/.config/fish/functions/__z.fish
linking ~/.config/fish/functions/__z_add.fish
linking ~/.config/fish/functions/__z_clean.fish
linking ~/.config/fish/functions/__z_complete.fish
linking ~/.config/fish/conf.d/z.fish
added 1 package in 2.70s
fishfile
にも追加されます。
~> cat ~/.config/fish/fishfile
jethrokuan/z
補足: fisherfileを直接編集
fisherfile
を直接編集してfisher
を実行することでも、パッケージのインストールができます。
⚙カスタマイズ
fishの設定ファイル
fishの設定ファイルは~/.config/fish/
に作られます。
- ~/.config/fish/
- completions/
- conf.d/
- functions/
- config.fish
config.fish
が、bashで言う.bashrcにあたります。カラースキームを何にするかみたいな個人用設定はここに書いていく感じですね。
このファイル、読み込まれる順番が結構後のほうなので、ちょっと工夫が必要だったりします。以下、昔書いた記事からの引用。
- fish組み込みの設定ファイル (編集するべきじゃないファイル)
- システム全体向け設定 /etc/fish/config.fishなど
- 個人向けスニペット ~/.config/fish/conf.d/
- 個人向け設定 ~/.config/fish/config.fish fish shellでrbenvを使う
パッケージによってはconf.d
配下にインストールされる場合がありますが、このフォルダはconfig.fish
よりも先に読み込まれます。特定の環境変数を必要とするパッケージがある場合、読み込み順の関係でconfig.fish
に書いていても間に合いません。
対処法として、conf.d/000-env.fish
みたいなファイルを作って環境変数はそこに書く、というのが定番になっています。(名前は何でもいいですが、他のファイルよりも早く読み込まれるようにすること。)
カラースキーム設定
''fish_config''コマンドで、ブラウザ上でカラースキームの確認・設定ができます。便利。
プロンプト変更
自分でスクリプトを書いて変更したり、他の人が作ったパッケージを利用することができます。
Oh My Fishというfishのフレームワークがあるんですが、プロンプト類(テーマ)は接頭辞「theme-」を付けてまとめられています。
シンプルなものからPowerLineを使ったゴリゴリカスタマイズ派まで色々ありますが、oh-my-fish/theme-bobthefishあたりがカスタマイズ性も高くて良いと思います。
プロンプトの注意点
fishにはfish_right_prompt
という、ターミナルの画面右端を起点としてプロンプトを表示する機能があります。コマンドの実行時間とかエラー番号を表示することが多い機能です。
これが日本語環境や絵文字と食い合わせが悪くて、だいたい表示が崩れます。
東アジアの文字幅(east asian width)とかあいまい幅(ambiguous width)の問題と言われているヤツで、tmuxとかVimで苦しめられている方も多いんじゃないでしょうか。
fish_ambiguous_width
とfish_emoji_width
という設定値で幅を指定できるので、頑張れば回避できるかもしれません。(私は諦めました。)
拡張コマンド
fishでは、独自の構文(fish script)でスクリプトを書くことができます。実は先ほど出てきたプロンプトも、fish_prompt
というコマンド(function)を書き換えることで設定します。
Awesome fishに有名どころがまとまっているので、まずはこの範囲で試してみてください。
前述のパッケージマネージャでインストールするだけなので、めっちゃ簡単です。
📝参考になるサイト
-
fish shell documentation
- 公式のドキュメント。
-
全訳!fishシェル普及計画
- fishのドキュメントを日本語訳してくれているサイト。
- 2〜3年前の情報なのでちょっと古くなっていますが、コマンドとかそんなに変わっていないので問題ないはず。
-
Awesome fish
- fish関係のおすすめプラグインを紹介しているリポジトリ。
明日は@e73ryoさんの「MonKey - Productivity Commands」のコマンド操作でUnity開発を効率化するです!
Author And Source
この問題について(fish shellのはじめかた 2019冬), 我々は、より多くの情報をここで見つけました https://qiita.com/honeniq/items/0a5e74a554d8bdc6b8c5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .