fish shell もうちょっと使ってみた
◆ fish shell 便利すぎた
前に msys2 を fish shell にしてみてデフォルト設定がけっこう使いやすかったので 一部の fedora VM も fish shell にしてみました
今回は簡単に気づいたところを書いていきます
とあるので help コマンドを実行してみたら
別の環境だと
html ファイルを開くので GUI が必要みたい
GUI のある環境で実行してみると
http://fishshell.com/docs/current/
このページが開きました
一応 file スキームでローカルファイルなのでオフラインでも見えるはずです
「~」 はカレントディレクトリの 「~」 で 「>」 は $ の代わり Windows 風なもの ということでした
こんな感じでちゃんとパスになります
また長くなるので途中のパスは基本一文字 (. から始まると次の文字も) というわかりやすい?ものになってます
「単純に1つ遡るのじゃなくて検索条件にヒットするものだけで遡りたい」
です
過去の mount コマンドの履歴だけを上下キーで選びたい とかそういうもの
fish shell では 「mount」 と打って↑キーを押せば前回の 「mount」 を含むコマンドが選ばれます
コマンド全体からのテキスト検索なので mount コマンドを検索というわけじゃないです
なので sudo ついてても大丈夫だったり便利です
↑キーが検索になった分 「mount まで打って もう一度 less でメモのファイルをみたくなった」など 別のことしようとした時に 1 つ前 や 2 つ前のコマンドをみたくても「mount」 と入力中なら↑キーでは 「mount」 で検索されるのでちょっと不便というデメリットはあります
でもそれより検索機能のほうが嬉しいことのほうが多いです
入力中を消すのもバックスペース連打で消さなくても Ctrl-C で入力中をクリアできますしね

こういうの
補完したければ Ctrl-F で薄く表示されてるコマンドに補完されます
zsh でもプラグインでこの機能を入れていたのですが fish shell ではデフォルトなのがいいところです
インストールしてすぐに使えてプラグインを拾ってくる手間がいらないです
ただ ちょっと違いがあって
というのが補完対象のときに zsh のだと Ctrl-F を押すごとに文節(スペースまで)補完されました
一度目は less まで補完してファイルは別に ということができました
fish shell だと スペースを気にせず完全に補完してしまいます
どっちでも良い気がしますがちょっと違いがありました
fish だと見やすくいろいろと色がついててわかりやすいです
最初は別に全部白色でもいいけど と思っていましたがしばらく使ってると色有りのほうが綺麗で気に入りました
デフォルトで十分見やすい色なので特に設定変える必要もなかったです
このように a と .a の 2 つのファイルがあります
全ファイルを選びたい時
では a だけになります
zsh だと
と書けます
でも一緒
これが bash だと .* の方がカレントディレクトリや親ディレクトリまで含んでしまって less で 4 つファイル開いたことになります
fish shell では zsh と同じで a と .a が開かれます
bash も設定出来るとは思いますがデフォルトで .* がカレントディレクトリと親ディレクトリを含めるのはどうかと思います
タブで補完するときにタブを 3 回押すと一覧が出てきます

この状態でタブを押すと選択中のカーソルが動きます
インラインで入力中の部分が切り替わるより見やすいです
さらに この状態で文字を入力すると 候補の一覧の中からさらに絞込ができます
ls で検索した状態で of を打てば lsof だけが残ります

ファイルに限らず systemctl のあとにタブを押すと enable や restart などの一覧が並びます
便利すぎです
他の zsh になってる VM も fish shell に置き換えていこうと思います
今回は簡単に気づいたところを書いていきます
help コマンド
ログインするたびにWelcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
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'
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>
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 で入力中をクリアできますしね
前回の補完
前も書きましたがコマンド打ってる途中に その打ちかけのコマンドから始まる直近のコマンドが薄く表示されます
こういうの
補完したければ 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
このように a と .a の 2 つのファイルがあります
全ファイルを選びたい時
less *
では a だけになります
zsh だと
less {.,}*
と書けます
less * .*
でも一緒
これが bash だと .* の方がカレントディレクトリや親ディレクトリまで含んでしまって less で 4 つファイル開いたことになります
fish shell では zsh と同じで a と .a が開かれます
bash も設定出来るとは思いますがデフォルトで .* がカレントディレクトリと親ディレクトリを含めるのはどうかと思います
Tab 補完
個人的に感動したのがこの機能タブで補完するときにタブを 3 回押すと一覧が出てきます

この状態でタブを押すと選択中のカーソルが動きます
インラインで入力中の部分が切り替わるより見やすいです
さらに この状態で文字を入力すると 候補の一覧の中からさらに絞込ができます
ls で検索した状態で of を打てば lsof だけが残ります

ファイルに限らず systemctl のあとにタブを押すと enable や restart などの一覧が並びます
便利すぎです
他の zsh になってる VM も fish shell に置き換えていこうと思います