terminal環境構築メモ (iTerm2 + fish)

# はじめに
私の普段利用しているterminal環境の構築備忘録です。

## 環境

```
macOS Monterey version 12.5
```

# Homebrew 導入
Macのパッケージ管理ソフトです。これを入れなきゃ始まらない。
https://brew.sh/index_ja

公式に従い、以下でインストール

```sh
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

# git 導入
```sh
$ brew install git
```

このとき、 以下の場所ば参照されればOK

```sh
$ which git
/usr/bin/git
```

されなければこのあたりを参考にパスを通す。
https://yumegori.com/mac-git-install20191121

```sh
# パスの追加
$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile
# 反映
$ source ~/.bash_profile
```

# iTerm2 導入
Mac標準のTerminalの強化版です。

```sh
$ brew install iterm2
```

もしくは以下より、zipをダウンロードする。
https://www.iterm2.com/index.html
解凍すると `iTerm.app` が出てくるのでApplicationsディレクトリに移してインストール完了

## 設定
素早く呼び出せるようにHotkeyを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/46ab07b9-606a-ae3e-d8ec-ecc0c11465ce.png)
このとき、Accessibilityの許可を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/7f819c01-d348-0f02-9693-88edcc440fcd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/9278898e-dee9-180f-4d19-5e0767fa26c9.png)

透過度を適当に設定しておく。
ちなみに透過/不透過は `cmd + u` で切り替えられる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/a1de101f-c8b3-7467-eb79-e0599145cded.png)

デフォルトだと Blue が見づらいので変更する。色はお好みで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/51cafd3f-9b16-bc4a-c95d-24be6ed1bf1a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/1bd32737-6247-e5d9-d888-c3c8debd5e54.png)


## Powerline Fonts のインストール
後でfishを使うときに文字化けすることがあるため入れておく。
https://github.com/powerline/fonts

インストール

```sh
# clone
$ git clone https://github.com/powerline/fonts.git --depth=1

# install
$ cd fonts
$ ./install.sh

# clean-up a bit
$ cd ..
$ rm -rf fonts
```

フォントを `Roboto Mono for Powerline` に変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/9cb532fd-0b7e-9928-4907-34998c2c2240.png)


# vim 設定
カラースキーマはこちらを使う
https://github.com/tomasr/molokai

```sh
# .vim ディレクトリを作成
$ mkdir ~/.vim

# 任意の場所にクローンして、 ~/.vim 配下にコピー
$ git clone https://github.com/tomasr/molokai.git
$ cp -r molokai/colors ~/.vim
```

.vimrc を修正

```sh
$ vi ~/.vimrc
```
```vim
" 表示設定
set number " 行番号を表示
set laststatus=2 " ステータスバー表示

" 操作設定
set virtualedit=onemore " 行末の1文字先までカーソルを移動できるように
set backspace=2 " backspaceの有効化

" インデント設定
set smartindent
set noautoindent

" タブキー設定
set smarttab
set expandtab

" 検索設定
set hlsearch " ハイライト
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する

" シンタックスハイライト
filetype on
syntax on
colorscheme molokai
set t_Co=256
```

# fish 導入
bash, zsh より凄いと噂のshell
https://fishshell.com/

まずはインストール

```sh
$ brew install fish
```

デフォルトshellをfishに変更

```sh
# fishのインストール先を確認
$ which fish
/opt/homebrew/bin/fish

# 末尾に /opt/homebrew/bin/fish を追加
$ sudo vi /etc/shells

# デフォルト shell を fish に変更
$ chsh -s /opt/homebrew/bin/fish

# iTermを再起動
```

brew のパスが通っていない場合、設定する。
```sh
$ brew --version
fish: Unknown command: brew

$ vi .config/fish/config.fish
if status is-interactive
    # Commands to run in interactive sessions can go here
    eval (/opt/homebrew/bin/brew shellenv) # <= これを追加
end

# shell を再起動
$ exec $SHELL -l

$ brew --version
Homebrew 3.5.10
Homebrew/homebrew-core (git revision 78d20a0ac51; last commit 2022-08-25)
Homebrew/homebrew-cask (git revision f44e97f476; last commit 2022-08-25)
```

## color 設定
以下を実行するとブラウザで設定画面が出てくる。

```sh
$ fish_config
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265565/a93765e0-9bbe-d278-cfdd-1c70a415636f.png)
好きなテーマを選んで `Theme Set !` を押す

## alias 設定
git 関連のコマンドを alias に登録。このへんもお好みで。

```sh
$ vi .config/fish/config.fish
```
```config
alias ga  'git add . '
alias gb  'git branch '
alias gc  'git checkout '
alias gcb 'git checkout -b '
alias gcm 'git commit -m '
alias gl  'git log --oneline '
alias gp  'git pull '
alias gs  'git status '
```

## Fisher のインストール
fishのプラグインの管理ツール
https://github.com/jorgebucaran/fisher

インストール

```sh
$ curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
```

### theme
ここに画像つきの一覧があるので好きなテーマを入れる
https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md

人気なのはこちら
https://github.com/oh-my-fish/theme-bobthefish
個人的にはシンプルなものが好きなのでこちらも利用
https://github.com/oh-my-fish/theme-mars

```sh
# Fisher でテーマを追加
$ fisher install oh-my-fish/theme-bobthefish
$ fisher install oh-my-fish/theme-mars

# さらにカスタマイズしたい場合は以下を編集することもできる。
$ vi ~/.config/fish/functions/fish_prompt.fish
```

### jethrokuan/fzf
曖昧検索が凄いやつです。
https://github.com/jethrokuan/fzf

```sh
# fzf 本体をインストール
$ brew install fzf

# Fisher で fzf を追加
$ fisher install jethrokuan/fzf
```

これで `ctrl + r` で履歴の曖昧検索ができます。

### decors/fish-ghq
gitのリポジトリ管理が楽になるやつです。
https://github.com/decors/fish-ghq

```sh
# ghq 本体をインストール
$ brew install ghq

# Fisher で fzf を追加
$ fisher install decors/fish-ghq

# ghq.root を設定します。
# ghq.root は複数指定でき、この配下のディレクトリを管理できるようになります。
$ vi .gitconfig
[ghq]
    root = ~/Documents
```

これで `ctrl + g` でリポジトリの曖昧検索ができるようになります。

# おまけ
## anyenv
pyenvとかnodenvをさらに管理するものです。
pyenvとかをそれぞれ入れる前に入れておきましょう。
https://github.com/anyenv/anyenv

```sh
# インストール
$ brew install anyenv

# 初期化
$ anyenv init
# Load anyenv automatically by adding
# the following to ~/.config/fish/config.fish:

status --is-interactive; and source (anyenv init -|psub)

# 上記に従い、configファイルを修正
$ vi ~/.config/fish/config.fish

# 以下を追記
status --is-interactive; and source (anyenv init -|psub)

# configを読み直す
$ source ~/.config/fish/config.fish
ANYENV_DEFINITION_ROOT(/Users/hoge/.config/anyenv/anyenv-install) doesn\'t exist. You can initialize it by:
> anyenv install --init

# 指示に従う
$ anyenv install --init
Manifest directory doesn\'t exist: /Users/hoge/.config/anyenv/anyenv-install
Do you want to checkout ? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/hoge/.config/anyenv/anyenv-install...
Cloning into '/Users/hoge/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 48, done.
remote: Total 48 (delta 0), reused 0 (delta 0), pack-reused 48
Unpacking objects: 100% (48/48), done.

Completed!
```

使い方は非常に簡単で、例えば nodenv をインストールしたかったら以下のコマンドを打つ。

```sh
$ anyenv install nodenv

# shell 再起動
$ exec $SHELL -l
```

あとは普通に Node.js 等をインストールすればOKです。