何もネタが無いのでぼくのconfig.fishを晒すね
「fish何やねんそれ」って人が全人類の99%だと思うので、適当に説明するね。
is 何
fish shell だよ。
bash とか zsh みたいなやつ。
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
を使ってね 」 とか言ってる間に &&
を ; 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
(空)
さて、
( ⌁ ) 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
何だね。宣言的でいいね
シンタックスの違いでこまること
ガッツリプラグイン書こうとしたり、シェルスクリプトをfishで組もうとしたりすると、↑みたいな差にいろいろ躓いて辛い。
けど、ほんとに上の3つだけ理解しておけば、大抵のことはなんとでもなる。
だいたいこういうのでハマるときは、コマンドコピペして使おうとしたりとか、そういう横着するとき。
上のやつさえ理解してれば大体大丈夫。
シェルスクリプト書く場合はbashで書くしね!!!!!
fishで書いたのなんて他人にシェアできないし、信じられないよ。HAHAHA。
前置きが長くなったけどぼくのconfig.fishを晒す
config.shっていってもほとんどaliasだけどね。
パワーがある人ならfishをbashに読み替えてくれればいいと思うよ。
をいい感じにするやつ
# 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 stats
で top
的な画面が見えるけど、名前とかがアレでそれなので、それっぽくしてくれるやつ。
alias jqless='jq . -C | less -R'
echo '{"query":{"bool":{"filter":[{"term":{"hoge":10}}]}}}' | jqless
みたいな感じにすると
こんな感じにいい感じに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で癒やされるといいと思うですよ。