fishで手間をそこそこに使えるLinuxのシェル環境を作る

サマリ

  • fishは最悪設定ファイル書かなくても、そこそこ使えるので便利

はじめに

新しいことを覚えるのはなかなかに大変で、しかも普段使わないようなものに 労力を払いたくない人はきっと多いと思う。特に文字だけしか表示されない端末。

端末操作って見た目黒魔術っぽくて、何かとっつきにくいように思うかもしれない。 なんとなく覚えている範囲で不足なく使えるからどうでもいいやと思うかもしれない。 でも、どうせなら作業効率を上げて早く帰りたい、もっと楽をしたいと思う人もたくさんいるはずだ。

そんなあなた、特に以下に該当するあなたに、fishを導入することをおすすめしたい。

  • bashでひたすら↑キーを押して履歴を辿るが、なかなか期待の履歴までたどり着けない
  • lsに色がついていなくて見づらいんだけど、色付けするのに何をしていいのかよくわからない
  • .xxshrcが読みにくくてつらい思いをしている

fishについて

fishとは何か

いろいろ便利機能があるシェルで、設定をあまりしなくてもそれなりに整ったものが使えるのが特徴。 いろいろな便利機能とは、例えば以下。きっともっといっぱいあるけど、慣れてからでいい。

  • 何も設定しなくてもそれなりに整った見栄えを提供してくれる
  • lsに勝手に色がついている
  • 履歴を元にコマンドをサジェストしてくれる
  • 履歴を辿りやすい

fishをインストールしたい

UbuntuとかDebianだったら、aptで入る。CentOSのあなたは諦めてソースコードからビルドしろ。

$ sudo apt install fish

fishを使いたい

インストールが終わったら、単にfishと打てばいい。

サジェストされたコマンドを使いたい? コマンドを途中まで打つと履歴等々含めてサジェストしてくれるので、 Ctrl-Eか、→キーを押してくれれば確定する。

履歴を簡単に辿りたい? コマンドを途中まで打って、↑キーを押せば、そのコマンドの履歴だけ辿ってくれる。例えばこんな感じ。

# cdの履歴を辿る例:まずはcdと打つ
$ cd 

# 次に↑キーを押すと、cdの履歴が順繰りに出てくるので、使いたい履歴を引いたらエンターを押す
$ cd ../xxxx/xxxx/

[やる気のあるあなたへ] PATHにデフォルト以外のディレクトリを追加する

以下のコマンドを打つと、fishのほうでPATHに追加してくれる*1。 設定ファイルに書く必要はない(書いちゃダメ)。

set -U fish_user_paths <追加したいディレクトリ> $fish_user_path

[やる気のあるあなたへ] fishの見栄えを少し調整する(その1)

まあデフォルトでそれなりに使えるfishだけど、見栄えには好みがあるので、好みの見栄えになるように調整したい。 調整するには設定ファイルを書く必要があるので、"設定ファイルを書くくらいならそのままでいいや"のあなたは 飛ばしてくれればOK。

プロンプトは、"~/.config/fish/functions/fish_prompt.fish"というファイルで設定する。

僕は

  • ログインしているユーザ名とサーバ名を、色をcyanで常に出したい
  • カレントディレクトリは省略せずに、色を黄色で出したい
  • gitで管理中のディレクトリ内では、ブランチ名を出したい
  • コマンドの開始は、">“にしたい

といったような趣味があるので、設定ファイルとしてはこんな感じになる。

function fish_prompt
    set_color cyan
    printf "%s@%s " (whoami) (hostname)
    set_color yellow
    printf "%s" (pwd)
    set_color normal
    printf "%s " (__fish_git_prompt)
    printf "\n> "
end

この設定ファイルを使うと、こんな感じに表示される。色は正しく表示されていないので、各自で。。。

bisco@bisco-server /home/bisco/.config/fish/functions
> 

[やる気のあるあなたへ] fishの見栄えを少し調整する(その2)

gitのブランチ名だけだとちょっと物足りないので、状態(未コミットのファイルがあるとか、そういうこと)を 表示するようにしたい。

その場合は、"~/.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_showuntrackedfiles 'yes'
set __fish_git_prompt_show_informative_status 'yes'
set __fish_git_prompt_showcolorhints 'yes'

この設定を書くと、何か状態が変化するとそれっぽいフォントで表示してくれる。なお、フォントがない場合は?になるので注意。

# 変更がないとき
bisco@bisco-server /home/bisco/dotfiles (master|✔)
# 未トラックのファイルが1つあるとき
bisco@bisco-server /home/bisco/dotfiles (master|…1)
# addしていないファイルが1つ、未トラックのファイルが1つあるとき
bisco@bisco-server /home/bisco/dotfiles (master|✚1…1)
# addしたファイルが1つあるとき
bisco@bisco-server /home/bisco/dotfiles (master|●1)
# リモートブランチよりも1つコミットが進んでいるとき
bisco@bisco-server /home/bisco/dotfiles (master↑1|✔)
# リモートブランチよりも1つコミットが遅れているとき
bisco@bisco-server /home/bisco/dotfiles (master↓1|✔)

まとめ

fishを使うと設定ファイル書かなくてもある程度使えるし、設定ファイルを書くとさらに快適になりますね。

*1:正確にはPATHに追加するんじゃなくて、fish_user_pathsという変数に追加して、PATHに付け足してくれる