AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ワイはただヒストリに消えてほしくなかっただけなんや

.bash_history を飛ばした事に気づいて、 shared history っぽい仕組みを入れたら BASH_IT が使えなくなったので zsh + Prezto に引っ越した。

.bash_profile に入れた shared history っぽい設定

http://iandeth.dyndns.org/mt/ian/archives/000651.html

function share_history {
    history -a
    history -c
    history -r
}
PROMPT_COMMAND='share_history'
shopt -u histappend

BASH_IT が使えなくなった設定調べるのもなー、というのと、 macOSX のデフォルトシェルが zsh に変わるとのことで、えいやっと移行することにしました。 ちなみに uninstall を叩いたら .bash_profile に記載した内容のうち、 BASH_IT の設定より下に書いていた内容が全て消えて、泣きながら timemachine から復旧しました、どんだけ古いバージョンを使っていたのか……(最近のはバックアップを作るっぽい)。

zsh + Prezto + Powerlevel9k

https://mitubaex.hatenablog.com/entry/2018/04/23/044455

大体こちらを参考に作業した。

zsh の用意

macOSX には標準で用意されているようなのですが、せっかくなので brew からインストールできる最新版を利用します。

brew install zsh
sudo vi /etc/shells

/etc/shells

# 以下を追記
/usr/local/bin/zsh

ログインシェルの切り替え

/etc/shells に追加した内容が正しければ、 chshzsh を利用できます。 切り替え後はターミナルを再起動するとわりと問題が出ないでしょう。

chsh -s /usr/local/bin/zsh

また、初回起動時に設定ファイルが存在しないので、「作る? どうする?」と聞いてくるのですが、とりあえず全部無視して q で抜けてやりましょう。

.bash_profile の移行

bash に依存する設定が入っていなければ、リネームするだけで問題ないでしょう。 これで設定ファイルが用意されます。 また、 bashzsh では rc _profile で読み込むタイミングが違うようなので用途に合わせて設定しましょう。 基本 .zshrc としておけばログインシェルで読まれるはず。

cp ~/.bash_profile ~/.zshrc

.bash_history の移行

ヒストリについては単純にリネームしただけではだめなようで、検索して出てきた ruby の変換スクリプトを利用しました。 python の変換スクリプトも見つけたのですが、なんか動かなかったので……。 該当のスクリプトruby 2.5.1 で動作を確認しています。 https://gist.github.com/goyalankit/a1c88bfc69107f93cda1

cd ~/
vi bash_to_zsh_history.rb
ruby bash_to_zsh_history.rb
  • 移行元のヒストリファイルは ~/.bash_history
  • 移行先の自動生成されるヒストリファイルは ~/.zsh_history

となっているので、違う場合はスクリプトを書き換えるなり、ファイルの位置を揃えるなりしてあげてください。 また、以下のように .zshrc にヒストリファイル名指定と共有をするための記述を追加します。 僕は、履歴の件数はもうひとつ 0 を足しました。

.zshrc

# 履歴ファイルの保存先
export HISTFILE=${HOME}/.zsh_history
# メモリに保存される履歴の件数
export HISTSIZE=1000
# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000
# 重複を記録しない
setopt hist_ignore_dups
# 開始と終了を記録
setopt EXTENDED_HISTORY

Prezto のインストール

基本 github の README 通りにやれば問題ありません。 Prezto 以下の $rcfileシンボリックリンクを作成する際に、失敗して何度も実行すると File exists と言われるので、その場合は ls -lha .z* などして、シンボリックリンクが設定されていれば問題ないです。

https://github.com/sorin-ionescu/prezto#installation

cd ~/
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

ここでターミナルを再起動しましょう、ちょっと見た目がにぎやかになります。

powerlevel9k のインストール

こちらも github の README から辿れるインストールの項通りに実行すれば問題はないでしょう。 macOSX を利用しているのでそのような説明ですが、他環境でもこれで大丈夫そう。 また、フォント表示の都合上必要なため、 nerdfont を事前にインストールしておきます。

https://github.com/Powerlevel9k/powerlevel9k/wiki/Install-Instructions#option-3-install-for-prezto

cd ~/
brew tap caskroom/fonts
brew cask install font-hack-nerd-font
git clone https://github.com/bhilburn/powerlevel9k.git  ~/.zprezto/modules/prompt/external/powerlevel9k
ln -s ~/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme ~/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup

.zpreztorc に powerlevel9k を利用する設定を追加します。

vi ~/.zpreztorc

.zpreztorc

zstyle ':prezto:module:prompt' theme 'sorin' の記述は削除するかコメントアウトしておいてください。

#
# Prompt
#

# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
#zstyle ':prezto:module:prompt' theme 'sorin'
POWERLEVEL9K_MODE='nerdfont-complete'
zstyle ':prezto:module:prompt' theme 'powerlevel9k'

ここでターミナルを再起動すると、なんかシャレオツな感じになります。 やったー!

おまけ

iTerm2 の profile からプリセットの color を pastel に変更しました、好きなように入れ替えるのだ。

動作が遅いんじゃが

BASH_IT も大概でしたが、 zsh+Prezto も色々読み込んでいるのでめちゃ遅いですね。 特に powerlevel9k の装飾を出すのに 70% くらいの時間を利用しているようです……。

time ( zsh -i -c exit )
 -> ( zsh -i -c exit; )  0.36s user 0.61s system 42% cpu 2.296 total

# zprof の結果

 num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    2         215.63   107.82   65.82%    140.51    70.26   42.89%  prompt_powerlevel9k_setup
 2)    2         325.44   162.72   99.34%     50.04    25.02   15.28%  pmodload
 3)    1          38.10    38.10   11.63%     38.10    38.10   11.63%  termColors
 4)    2          24.02    12.01    7.33%     24.02    12.01    7.33%  promptinit
 5)    1          17.40    17.40    5.31%     17.36    17.36    5.30%  powerlevel9k_vcs_init
 6)    1          15.73    15.73    4.80%     15.73    15.73    4.80%  is-callable
 7)    1          14.27    14.27    4.36%     14.27    14.27    4.36%  compinit
 8)   41           7.14     0.17    2.18%      7.14     0.17    2.18%  defined
 9)   36          12.09     0.34    3.69%      5.03     0.14    1.53%  set_default
10)   11           4.44     0.40    1.35%      4.44     0.40    1.35%  (anon)
11)    1           4.21     4.21    1.28%      4.21     4.21    1.28%  colors
12)    8           3.56     0.44    1.09%      3.56     0.44    1.09%  add-zsh-hook
13)    2           2.50     1.25    0.76%      2.50     1.25    0.76%  is-at-least
14)    1         219.10   219.10   66.88%      0.33     0.33    0.10%  set_prompt
15)    1         219.33   219.33   66.95%      0.23     0.23    0.07%  prompt
16)    2           0.09     0.04    0.03%      0.09     0.04    0.03%  segment_in_use
17)    1           0.12     0.12    0.04%      0.07     0.07    0.02%  print_deprecation_warning

2019/10/28 追記

まる五年付き合った early 2015 が勝手に再起動したり、バッテリー膨らんで机に置くと「ガタガタッ」って言うようになったので、 MacBookPro 2019 の一番安いやつに RAM 16G/SSD 512G 積んで引っ越しました。 計測結果は以下。

( zsh -i -c exit; )  0.28s user 0.29s system 89% cpu 0.629 total

ギョエーめっちゃ早い。 メモリ増やしたのもそうですが、プロセッサ世代進んだのもわりと効果ありそうですね。