◆ fish shell 便利すぎた

前に msys2 を fish shell にしてみてデフォルト設定がけっこう使いやすかったので 一部の fedora VM も fish shell にしてみました

今回は簡単に気づいたところを書いていきます

help コマンド

ログインするたびに
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish

とあるので help コマンドを実行してみたら
Error: GDK_BACKEND does not match available displays

別の環境だと
[user@fedora]~% fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
user@fedora ~> help
/usr/bin/xdg-open: 行 832: www-browser: コマンドが見つかりません
/usr/bin/xdg-open: 行 832: links2: コマンドが見つかりません
/usr/bin/xdg-open: 行 832: elinks: コマンドが見つかりません
/usr/bin/xdg-open: 行 832: links: コマンドが見つかりません
/usr/bin/xdg-open: 行 832: lynx: コマンドが見つかりません
/usr/bin/xdg-open: 行 832: w3m: コマンドが見つかりません
xdg-open: no method available for opening 'file:///usr/share/doc/fish/index.html'

html ファイルを開くので GUI が必要みたい

GUI のある環境で実行してみると

http://fishshell.com/docs/current/

このページが開きました
一応 file スキームでローカルファイルなのでオフラインでも見えるはずです

カレントディレクトリ

これまで
~>
がプロンプトで 「→」 みたいな感じで独特なプロンプトだと思ってたのですが違いました

「~」 はカレントディレクトリの 「~」 で 「>」 は $ の代わり Windows 風なもの ということでした
user@fedora ~>  cd .nodebrew/node/v7.4.0/lib/node_modules/npm/node_modules/
user@fedora ~/.n/n/v/l/n/n/node_modules>

こんな感じでちゃんとパスになります
また長くなるので途中のパスは基本一文字 (. から始まると次の文字も) というわかりやすい?ものになってます

↑キーのヒストリー

履歴からコマンドを選べる上下キーは便利というか CUI ではなくては生きていけないレベルな必需品ですが いつも思うのが
「単純に1つ遡るのじゃなくて検索条件にヒットするものだけで遡りたい」
です

過去の mount コマンドの履歴だけを上下キーで選びたい とかそういうもの

fish shell では 「mount」 と打って↑キーを押せば前回の 「mount」 を含むコマンドが選ばれます
コマンド全体からのテキスト検索なので mount コマンドを検索というわけじゃないです
なので sudo ついてても大丈夫だったり便利です

↑キーが検索になった分 「mount まで打って もう一度 less でメモのファイルをみたくなった」など 別のことしようとした時に 1 つ前 や 2 つ前のコマンドをみたくても「mount」 と入力中なら↑キーでは 「mount」 で検索されるのでちょっと不便というデメリットはあります
でもそれより検索機能のほうが嬉しいことのほうが多いです

入力中を消すのもバックスペース連打で消さなくても Ctrl-C で入力中をクリアできますしね

前回の補完

前も書きましたがコマンド打ってる途中に その打ちかけのコマンドから始まる直近のコマンドが薄く表示されます

fishcomp01

こういうの

補完したければ Ctrl-F で薄く表示されてるコマンドに補完されます

zsh でもプラグインでこの機能を入れていたのですが fish shell ではデフォルトなのがいいところです
インストールしてすぐに使えてプラグインを拾ってくる手間がいらないです

ただ ちょっと違いがあって
less a.txt

というのが補完対象のときに zsh のだと Ctrl-F を押すごとに文節(スペースまで)補完されました
一度目は less まで補完してファイルは別に ということができました

fish shell だと スペースを気にせず完全に補完してしまいます

どっちでも良い気がしますがちょっと違いがありました

シンタックスハイライト

zsh だとこれもデフォルトだと全部白色 見やすいとはいいづらいです
fish だと見やすくいろいろと色がついててわかりやすいです

最初は別に全部白色でもいいけど と思っていましたがしばらく使ってると色有りのほうが綺麗で気に入りました

デフォルトで十分見やすい色なので特に設定変える必要もなかったです

*

user@fedora ~/test> ls -a
./  ../  .a  a

このように a と .a の 2 つのファイルがあります
全ファイルを選びたい時
less *

では a だけになります

zsh だと
less {.,}*

と書けます
less * .*

でも一緒


これが bash だと .* の方がカレントディレクトリや親ディレクトリまで含んでしまって less で 4 つファイル開いたことになります


fish shell では zsh と同じで a と .a が開かれます

bash も設定出来るとは思いますがデフォルトで .* がカレントディレクトリと親ディレクトリを含めるのはどうかと思います

Tab 補完

個人的に感動したのがこの機能
タブで補完するときにタブを 3 回押すと一覧が出てきます

fishtab01

この状態でタブを押すと選択中のカーソルが動きます
インラインで入力中の部分が切り替わるより見やすいです


さらに この状態で文字を入力すると 候補の一覧の中からさらに絞込ができます
ls で検索した状態で of を打てば lsof だけが残ります

fishtab02

ファイルに限らず systemctl のあとにタブを押すと enable や restart などの一覧が並びます

便利すぎです



他の zsh になってる VM も fish shell に置き換えていこうと思います