mac で fish の水槽(環境)整備。
気持ち
-
最近、
macOS 10.15 Catalina
では デフォルトのシェルがbash
からzsh
になったという記事をちらほら拝見しました。あまのじゃくな僕はこの機会にfish
の環境を一通り整えてみることにしました。 -
fish に関しては、以前 この記事 で入門をしたものの、「エンジニアは最初に見たシェルを親だと思って着いていく」という性質があるので、ずっと
bash
を使っていました。 -
「一通り」とは言っても、独断と偏見で、こんな感じでいいでしょ と思うとこまでやった、という意味です。
-
内容は以下の通りです。
- パッケージ管理ツールを入れる
-
fisher
(fisherman
) oroh-my-fish
-
-
powerline
- プロンプトが
>Users>Name>Documents>hoge>
みたいになるやつ -
theme-bobthefish
とかいうやつで実現できるらしい。
- プロンプトが
-
peco
-
history
検索便利ツール
-
-
z
- ディレクトリの history 検索便利ツール。
ディレクトリは CNN 研究用なのであまり気にしないでください..
ということで、順次導入していきます。
mac に fish を install
$ brew install fish
- ちなみにバージョンは
~> fish --version
fish, version 3.0.2
-
/etc/shells
に fish を追記します。- 先に which fish で確認
$ which fish
/usr/local/bin/fish
-
この結果を
/etc/shells
に追記します。-
$ emacs /etc/shells
でもいいですし、 -
$ cat /usr/local/bin/fish >> /etc/shells
でもよいです。
-
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish # これを追記
デフォルトの shell を fish にするなら
$ chsh -s /usr/local/bin/fish
起動
- ちなみに install 直後に fish を起動すると以下のような感じです
DaiMac:~ sudachi $ fish # <= bash
Welcome to fish, the friendly interactive shell
sudachi@DaiMac ~> # <= fish
- colorize や conda 環境の設定などはなにもしていません。
-
~>
の~
の部分 (ディレクトリ表示部分) が緑なだけです。
-
設定ファイル
- デフォルトでは 1つだけあるようです。
$ ls .config/fish/
fish_variables
-
$ la
,$ ll
などが普通に (設定してないのに) 動く。- すげえ
-
$ l
は動きませんでした。- 試しに、これを alias として登録してみましょう。
~> emacs ~/.config/fish/config.fish
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
alias l 'ls -CF' # これを追記
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
~> source ~/.config/fish/config.fish
~> l
Downloads/ Desktop/ Documents/ ...
# OK うごきました!
- 以下、度々出てくる
-- 8<--
は エディタのバッファを意味します。
1. package manager: fisher
(参考2 より)
fish には oh-my-fish という fish のパッケージ管理フレームワークがあるのですが、古いとか著作権問題がどーのこーので停止してたとか結構ディスられてました。
そこで、Fisherman というプラグインマネージャーがいいということだったので Fishermanを導入してみることに
- そのほか参考にさせていただいたサイトでも、概ね
fisher(man)
を install しているものが多かったので従おうと思います (長いものには巻かれろ)。
curl で落とします。
~> curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
~> ls ~/.config/fish/
fish_variables functions # <= functions/ が増えた。
- 確認です。
~> fisher -v
fisher version 3.2.9 ~/.config/fish/functions/fisher.fish
- conf 下に配置するだけで使えるようになるみたいですね。
3. peco plugin
-
すみません順番が前後しますが先に
peco
を入れます。 -
package の add (プラグインを入れている感じなのかな?)
~> fisher add oh-my-fish/plugin-peco
created new fishfile in ~/.config/fish/fishfile
fetching https://codeload.github.com/oh-my-fish/plugin-peco/tar.gz/master
linking ~/.config/fish/functions/peco_kill.fish
linking ~/.config/fish/functions/peco_select_history.fish
added 1 package in 0.55s
-
peco を用いた検索を
Ctrl-r
に割り当てます。- ちなみに
bash
ではCtrl-r
はhistory
を後方検索するショートカットに割り当てられていますね。 -
peco
の設定をする前のfish
で 同キーバインドを試して見ましたが、特に割り当てられていないようでなにも起こりませんでした。
- ちなみに
-
~/.config/fish/config.fish
に設定を追記します。
#peco
function fish_user_key_bindings
bind \cr peco_select_history
end
- これだけだと
Ctrl-r
した後に以下のような Error が出てしまいました。
~> fish: Unknown command peco
~/.config/fish/functions/peco_select_history.fish (line 8):
history|peco $peco_flags|read foo
^
in function 'peco_select_history'
called on standard input
-
brew
で 本体にもpeco
を入れる必要があるようです。-
peco
自体はfish
関係なく、コマンド履歴とディレクトリ移動先の検索を行える tool として提供されているらしいです。
-
brew で peco をインストール
-
$ brew install peco
で取得できるらしい。- これも install したら
Ctrl-r
で実行できるようになりました! -
peco
そのものと、fish
用plugin
が必要ということなのでしょうか..- ちなみに
brew
でpeco
を入れたわけですが、bash
ではCtrl-r
しても後方検索のままでした。 -
.bashrc
などに設定をかけば変わるかもしれませんね。
- ちなみに
- これも install したら
z をいれます。
-
z
: 履歴からディレクトリへ移動ができるコマンドです。 -
訪問履歴からディレクトリ移動候補を表示してくれます。
-
また、
z {文字列}
のように入力すると、履歴から一致するものを探して来てくれるようです。
インストール
-
~> fisher add jethrokuan/z
-
~> z python
とかやると下に python 関連のプロジェクトのディレクトリが検索され、候補が出てきてくれるようになりました! - 選択後、
z path
となったら、Enter
を押すと移動してくれるようです。
-
2. theme-bobthefish プラグインの導入
-
いよいよお待ちかね、
powerline
に見えるアレを入れます。- コンソールの見た目をリッチにしてくれる上に、
git
の現在のブランチや差分状況をわかりやすく表示してくれる機能もあるのでgit
を使っている方ならぜひオススメしたいですね -
ただし、 これを入れると、プロンプトをコピペした時に文字化けします。
- 普段コンソールの入出力などのメモを取りながら作業をなさる方は注意です..
- 以下、
fish
を用いていますがプロンプトは$
を用います。
- コンソールの見た目をリッチにしてくれる上に、
インストールです
-
~> fisher add oh-my-fish/theme-bobthefish
- インストール完了するとすぐに反映されますが文字化けする場合があります。
- その場合は Powerline-fonts をインストールしましょう。
- 以下に手順を載せます。
Powerline-fonts をインストール
- どこでもいいので、powerline-fonts をダウンロードしましょう。
- 僕は fish の設定ファイルの場所に適当にコピリました。
$ cd ~/.config/fish
$ git clone https://github.com/powerline/fonts.git
$ l
config.fish fish_variables fonts/ # <= これが増えた
- ダウンロード
fonts/
ディレクトリ下に移動し、インストールを実行します。
$ cd fonts
$ ./install.sh
Copying fonts...
Resetting font cache, this may take a moment...
Powerline fonts installed to /Users/sudachi/Library/Fonts
- install できれば、
fonts/
は用済みなので、いらなければ削除してしまいましょう。
$ cd ../
$ rm -rf ./fonts
次に terminal のフォントを powerline-font に変更します
-
次に、
terminal
やiTeam2
にて、インストールしたpowerline-fonts
を使うように設定します。 -
iTerm2
使いの方-
iTerm2 > Preferences > Profiles > Text > Font
から -
Literation Mono Powerline
を選択しましょう。 -
ここです↓
-
+ と、参考には書いてあったのですが.....
+ `ubuntu Mono derivative Powerline` という Font がある!!
+ メイン武器が `ubuntu` なこともありますが `ubuntu` の Font 案外好きなんですよね。
+ これにしても問題なかったのでこれにしてみました!! かわいい!!
+ そして、なんか心なしか文字が小さくなった気がする..ので `12 -> 14` に変更
-
terminal.app
(デフォルトのやつ) をお使いの方-
環境設定 > プロファイル > テキスト > フォント
で設定できます。 -
ここ ↓ から同様の手順で変更してください。
-
ブランチ名が表示されていない場合
-
文字化けが解消されたが、現在のブランチ名が出てきませんでした。
- その場合は、
config.fish
に 以下をを追記して再読み込みすることで表示されるようになります。
- その場合は、
set -g theme_display_git_master_branch yes
$ source ~/.config/fish/config.fish
optional な設定
- ディレクトリを省略したくない場合
- デフォルトでは、以下のようにカレントディレクトリ以外は省略されています。
~/D/p/0/cnn >> master >
# 本当は ~/Documents/python/020_AI/cnn (master)
- 省略させたくない場合は
config.fish
に以下を追記しましょう。
set -g fish_prompt_pwd_dir_length 0
- 更新をお忘れなく..
$ source ~/.config/fish/config.fish
以下、僕が config.fish
に追記した内容です
-
prompt
をnew line
で実行するように変更
set -g theme_newline_cursor yes
- 時刻を表示しないように設定
set -g theme_display_date no
- コマンド実行時間の非表示
set -g theme_display_cmd_duration no
anaconda path を通す
-
python を使って画像認識の研究をしているので、anaconda を使いたいです。
-
現状
$ which python
/usr/bin/python # デフォルトで入っている 2系のやつ
pyenv
- 僕の anaconda は
pyenv
の上で動いているので、先にpyenv
を通します。- 以下の path を
config.fish
に追加
- 以下の path を
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
set PATH $HOME/.pyenv $PATH
eval (pyenv init - | source)
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
$ python --version
Python 3.6.5 :: Anaconda, Inc. # お??
$ which python
/Users/sudachi/.pyenv/shims/python # 通った..のかな??
anaconda
- 上記の path を通すと、なぜかすぐに
conda
が使えるようになりました。
$ conda -V
conda 4.6.14
$ conda activate
CommandNotFoundError:
$ conda init fish
$ conda activate # <= できない??
-
conda
は使えるようになりましたが、conda activate
などが使えない場合は以下をconfig.fish
に追記します。
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
set -x PATH $PATH "$PYENV_ROOT/bin"
status --is-interactive; and . (pyenv init - | psub)
source (conda info --root)/etc/fish/conf.d/conda.fish
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
$ source ~/.config/fish/config.fish
$ conda -V
conda 4.6.14
$ conda activate
$ (base)
$ which python (base)
/Users/sudachi/.pyenv/versions/anaconda3-5.2.0/bin/python
$ conda activate dataflow (base)
$ which python (dataflow)
/Users/sudachi/.pyenv/versions/anaconda3-5.2.0/envs/dataflow/bin/python
$ python --version (dataflow)
Python 2.7.16 :: Anaconda, Inc.
- ubuntu に fish 入れた時も思いましたが、その末尾に出るスタイルは変わらないんだ..って感じです。
最終的に..
- うちの fish はこんな感じにすくすく成長しました↓
一応設定ファイルも晒しておきます。
# ----------
# peco config
# ----------
set fish_plugins theme peco
function fish_user_key_bindings
bind \cr peco_select_history # Bind for prco history to Ctrl+r
end
# ----------
# bobthefish config
# ----------
set -g fish_prompt_pwd_dir_length 0 # ディレクトリ省略しない
set -g theme_newline_cursor yes # プロンプトを改行した先に設ける
set -g theme_display_git_master_branch yes # git の branch 名を表示
set -g theme_color_scheme dracula
set -g theme_display_date no # 時刻を表示しないように設定
set -g theme_display_cmd_duration no # コマンド実行時間の非表示
# ----------
# python
# ----------
set -gx PYENV_ROOT "$HOME/.pyenv"
set -x PATH $PATH "$PYENV_ROOT/bin"
status --is-interactive; and . (pyenv init - | psub)
source (conda info --root)/etc/fish/conf.d/conda.fish
# ----------
# node.js
# ----------
set -x PATH $HOME/.nodebrew/current/bin $PATH
# ----------
# alias
# ----------
alias l 'ls -CF'
-
git
にconda
を使い始めるといきなりコンソールが騒がしい感じになりますが、これでfish
を運用する準備は整ったと思います。 -
さあ、遊ぶぞ~