39
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OPENLOGIAdvent Calendar 2017

Day 17

🐟🐚

Last updated at Posted at 2017-12-16

何もネタが無いのでぼくのconfig.fishを晒すね :pray:

「fish何やねんそれ:fish:」って人が全人類の99%だと思うので、適当に説明するね。

:fish: is 何

fish shell だよ。
bash とか zsh みたいなやつ。
:fish: :shell:

bash -> zsh -> fish という遍歴で使ってるよ。
イケてるかどうかわからないけど、ここ1年以上ずっと使ってるよ。いい感じだよ。

環境

( ⌁ ) fish -v
fish, version 2.6.0
( ⌁ ) omf --version
Oh My Fish version 6

omf is 何

oh-my-fish だよ。
たぶんoh-my-zshパクリオマージュ。

bash との違い

何か知らんけど、bash<->zshって結構互換性あるけど、fishは「this way...」って感じで何か違う道を歩んでるから、微妙にシンタックスが異なって、たぶん最初はブチ切れると思うので、そこだけ説明しておくね。

&& とか ||

$ [ -e "./foo" ] && rm -f ./foo

./foo があったら ./foo を削除するよ。簡単だよね。
&&AND||OR。わかりやすい。
でもこれを fish で実行すると

( ⌁ ) [ -e "./foo" ] && rm -f foo
fish: Unsupported use of '&&'. In fish, please use 'COMMAND; and COMMAND'.
[ -e "./foo" ] && rm -f foo
                ^

というわけでエラーになっちゃうんだ。
ただしくは、こう。

[ -e "./foo" ]; and rm -f foo

&& は使えないから ; and を使ってね :star:」 とか言ってる間に &&; and のaliasとして解釈してくれたらいいのに、とマジで思うんだけどね。きっと深淵なる理由があるだろうね。

|| の代わりは ; OR だよ。慣れりゃわかりやすい気もするけど、ぶっちゃけ &&|| でいいよね。

バッククォートで囲んだりとか $() とか

cd $(dirname $(which bash))
cd $(dirname `which bash`)
cd `dirname $(which bash)`

みたいにbashの世界じゃバッククォートで囲んだり、 $() で囲んだ結果を返り値的に受け取れるやつがあるじゃん。(詳しい理屈は知らね)

fishの世界で叩いてみるね。

( ⌁ ) cd $(dirname $(which bash))
fish: $(...) is not supported. In fish, please use '(which)'.
cd $(dirname $(which bash))
             ^
( ⌁ ) cd $(dirname `which bash`)
fish: $(...) is not supported. In fish, please use '(dirname)'.
cd $(dirname `which bash`)
   ^
( ⌁ ) cd `dirname $(which bash)`
fish: $(...) is not supported. In fish, please use '(which)'.
cd `dirname $(which bash)`
            ^
( ⌁ ) dirname `which bash`
.
.
( ⌁ ) `which bash`
コマンド '`which' は見つかりませんでした。もしかして:
 コマンド 'which' - パッケージ 'debianutils' (main)
`which: コマンドが見つかりません

ほんとダメ。正しくは、こう。

cd (dirname (which bash))

シンプルで非常によろしいんだけどね。

envを使う

コマンドの先頭にENVつけるやつあるじゃん。そのコマンドでしか有効じゃない環境変数やつ。


$ FOO=fooooooooo bash -c 'echo $FOO'
fooooooooo
$ echo $FOO
(空)

さて、 :fish::shell:

( ⌁ ) FOO=barrrrrrrrrr fish -c 'echo $FOO'
(   ) echo $status
127

FOO=foooooo の時点で怒られたよ
$status はいわゆる $? ね。

正しくは、こう

( ⌁ ) env FOO=barrrrrrrrrr fish -c 'echo $FOO'
barrrrrrrrrr
( ⌁ ) echo $FOO
(空)

env KEY=value 何だね。宣言的でいいね :innocent:

シンタックスの違いでこまること

ガッツリプラグイン書こうとしたり、シェルスクリプトをfishで組もうとしたりすると、↑みたいな差にいろいろ躓いて辛い。
けど、ほんとに上の3つだけ理解しておけば、大抵のことはなんとでもなる。

だいたいこういうのでハマるときは、コマンドコピペして使おうとしたりとか、そういう横着するとき。
上のやつさえ理解してれば大体大丈夫。

シェルスクリプト書く場合はbashで書くしね!!!!!

fishで書いたのなんて他人にシェアできないし、信じられないよ。HAHAHA。

前置きが長くなったけどぼくのconfig.fishを晒す

config.shっていってもほとんどaliasだけどね。

パワー:muscle:がある人ならfishをbashに読み替えてくれればいいと思うよ。

:fish:をいい感じにするやつ

# use finsh-ssh-agent ( https://github.com/tuvistavie/fish-ssh-agent )
fundle plugin 'tuvistavie/fish-ssh-agent'

#setup peco plugin  see) https://github.com/oh-my-fish/plugin-peco
set fish_plugins theme peco
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

社内だとfzf派が多い気がするけど、ワイはpeco派やで。
とりあえず入れてるプラグインはこれくらい。簡単だね。

omf install flash                                               
omf theme flash                                                                       
omf install peco 

peco ったらomfでいれてるの上だけだった。
ぼくはflash っていうテーマが大好きでいつもコレを使ってるいぇい。

とてもよく使うalias

alias vi=vim
alias c=clear
alias l=ll

c=clear はマジオススメ。全人類使ったほうが良いコレ。

追記

ctrl + l でええんちゃう?って教えてもらった!すごい!しらんかった!

忘れがちだけと稀によく使うalias

alias ds='docker stats (docker ps --format="{{.Names}}")'

docker statstop 的な画面が見えるけど、名前とかがアレでそれなので、それっぽくしてくれるやつ。

alias jqless='jq . -C | less -R'
echo '{"query":{"bool":{"filter":[{"term":{"hoge":10}}]}}}' | jqless

みたいな感じにすると

範囲を選択_054.png

こんな感じにいい感じにLESSで色付きでjqの結果を表示してくれるんだ。すごいでしょ。

ほぼ使わないけど設定してあるalias

alias random='cat /dev/urandom | env LC_CTYPE=C tr -dc "[a-zA-Z0-9//+=!@#\$%^&()\-_\|]" | head -c'
( ⌁ ) random 1
1
( ⌁ ) random 10
g+]]g]2/LW
( ⌁ ) random 50
zbkV8Atx6/x(q@D8]61c9RtPED2fd9noO6F8G7WKLy7HiLHiVD

こんな感じで指定した文字数のランダムな文字列を作ってくれるやつ。
なんとなく作ったけど、まず使わないね。

ごくごく稀に使うalias

alias janrandom='ruby -e \'n=["4",["5","9"].sample,Random.rand(1 .. 9999999999).to_s.rjust(10,"0")].join.split(//).reverse;;e=o=0;n.each_with_index{|v,k|k.to_i.odd? ? o+=v.to_i : e+=v.to_i};n.unshift((10-((e*3)+o)%10)%10);puts n.reverse.join\''

もはやただのrubyだよね。rubyは本職じゃないから汚くても許してちょんまげ。
適当なJANコードを生成してくれるんだ。すごいよ。

fishの何がすごいのか

こんな感じでほぼ何も設定してなくても、完成度の高いシェルになるのが魅力。
実際操作感に影響与えてるんはpecoプラグインくらいで、あとは flash テーマが大好きってくらい。

というわけで

各種シェルに消耗したら、fishで癒やされるといいと思うですよ。

39
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?