Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

bash 使いが fish でスイスイ泳げるようになるまで (in Mac)

$
0
0

mac で fish の水槽(環境)整備。

気持ち

  • 最近、macOS 10.15 Catalinaでは デフォルトのシェルが bashから zshになったという記事をちらほら拝見しました。あまのじゃくな僕はこの機会に fishの環境を一通り整えてみることにしました。

  • fish に関しては、以前 この記事で入門をしたものの、「エンジニアは最初に見たシェルを親だと思って着いていく」という性質があるので、ずっと bashを使っていました。

  • 「一通り」とは言っても、独断と偏見で、こんな感じでいいでしょ と思うとこまでやった、という意味です。

  • 内容は以下の通りです。

  1. パッケージ管理ツールを入れる
    • fisher ( fisherman ) or oh-my-fish
  2. powerline
    • プロンプトが >Users>Name>Documents>hoge>みたいになるやつ
    • theme-bobthefishとかいうやつで実現できるらしい。
  3. peco
    • history検索便利ツール
  4. z
    • ディレクトリの history 検索便利ツール。

ちなみに現状はこんな感じです↓
スクリーンショット 2019-11-08 22.15.50.png

ディレクトリは CNN 研究用なのであまり気にしないでください..
ということで、順次導入していきます。

mac に fish を install

$ brew install fish

  • ちなみにバージョンは
~> fish --versionfish, 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 -vfisher 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-rhistoryを後方検索するショートカットに割り当てられていますね。
    • pecoの設定をする前の fishで 同キーバインドを試して見ましたが、特に割り当てられていないようでなにも起こりませんでした。
  • ~/.config/fish/config.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そのものと、 fishpluginが必要ということなのでしょうか..
      • ちなみに brewpecoを入れたわけですが、 bashでは Ctrl-rしても後方検索のままでした。
      • .bashrcなどに設定をかけば変わるかもしれませんね。

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 に変更します

  • 次に、terminaliTeam2にて、インストールした powerline-fontsを使うように設定します。

  • iTerm2使いの方

    • iTerm2 > Preferences > Profiles > Text > Fontから
    • Literation Mono Powerlineを選択しましょう。
    • ここです↓
      スクリーンショット 2019-11-08 23.03.08.png

      • と、参考には書いてあったのですが.....
      • ubuntu Mono derivative Powerlineという Font がある!!
      • メイン武器が ubuntuなこともありますが ubuntuの Font 案外好きなんですよね。
      • これにしても問題なかったのでこれにしてみました!! かわいい!!
      • そして、なんか心なしか文字が小さくなった気がする..ので 12 -> 14に変更
  • terminal.app (デフォルトのやつ) をお使いの方

    • 環境設定 > プロファイル > テキスト > フォントで設定できます。
    • ここ ↓ から同様の手順で変更してください。

スクリーンショット 2019-11-08 23.05.15.png

ブランチ名が表示されていない場合

  • 文字化けが解消されたが、現在のブランチ名が出てきませんでした。

    • その場合は、config.fishに 以下をを追記して再読み込みすることで表示されるようになります。
~/.config/fish/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に以下を追記しましょう。
~/.config/fish/config.fish
set -g fish_prompt_pwd_dir_length 0
  • 更新をお忘れなく..
$source ~/.config/fish/config.fish

以下、僕が config.fishに追記した内容です

  • promptnew lineで実行するように変更
~/.config/fish/config.fish
set -g theme_newline_cursor yes
  • 時刻を表示しないように設定
~/.config/fish/config.fish
set -g theme_display_date no
  • コマンド実行時間の非表示
~/.config/fish/config.fish
set -g theme_display_cmd_duration no

anaconda path を通す

  • python を使って画像認識の研究をしているので、anaconda を使いたいです。

  • 現状

$ which python
/usr/bin/python  #デフォルトで入っている 2系のやつ

pyenv

  • 僕の anaconda は pyenvの上で動いているので、先に pyenvを通します。
    • 以下の path を config.fishに追加
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--
set PATH $HOME/.pyenv $PATHeval (pyenv init - | source)
-- 8<---- 8<---- 8<---- 8<---- 8<---- 8<--

$ python --versionPython 3.6.5 :: Anaconda, Inc.  #お??
$ which python
/Users/sudachi/.pyenv/shims/python  #通った..のかな??

anaconda

  • 上記の path を通すと、なぜかすぐに condaが使えるようになりました。
$ conda -Vconda 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 -Vconda 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 はこんな感じにすくすく成長しました↓

スクリーンショット 2019-11-08 19.38.35.png

一応設定ファイルも晒しておきます。

~/.config/fish/config.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'
  • gitcondaを使い始めるといきなりコンソールが騒がしい感じになりますが、これで fishを運用する準備は整ったと思います。

  • さあ、遊ぶぞ~

参考です。お世話になりました。

  1. fish shell の導入方法と使い方まとめ
  2. 【fish】ターミナル環境をかっこよくしてみた話
  3. 詳解 fish
  4. fish shell を使いたい人生だった
  5. powerline font
  6. bobthefish 各種設定
  7. pyenv path
  8. conda activate

Viewing all articles
Browse latest Browse all 2722

Trending Articles