2020-05-16
5/16
zshをfishっぽくいい感じにできた
5/13にfishでちょっといいと思った機能はzshでもできそうだと気がついたので、やってみた。
…で、やってみたらできた。
作業環境はUbuntu 18.04.
やったこと:
- oh-my-zshをインストール
- テーマを選ぶ
- shrink-pathを設定し、プロンプトをいい感じに調整
- zsh-autosuggestionsをインストールして設定
1つずつ軽く振り返っておく。
oh-my-zshをインストール
https://github.com/ohmyzsh/ohmyzsh
README.mdの通りに。一応 tools/install.sh の中身はざっと見た。
zshじゃないとデフォルトではchshされてしまうのと、インストール後に zsh -l
が走ることは確認した上で、そのまま実行:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
元の ~/.zshrc は退避された上で、oh-my-zshが作った ~/.zshrc が配置されていることに気づいた。
とりあえず自分の ~/.zshrc に戻して、oh-my-zshが作った ~/.zshrc の記述を ~/.zshenv と ~/.zshrc に追記する。
これだけでも PROMPT
が変わって、見た目が変わったなという印象。
ただ、自分は RPROMPT
に色々詰め込んでいるので、調整が必要。
プロンプトについては次とその次のステップで調整する。
テーマを選ぶ
https://github.com/ohmyzsh/ohmyzsh/wiki/Themes から選ぶ。
Externalなテーマもあるらしいけど、今は興味なし。
上から見ていって、agnosterがよさげだったので、君に決めた。
これもデフォルトだと左PROMPTが長くて、しかもリポジトリのREADMEの通りにやろうとしても AGNOSTER_*
な変数はセットされていない。
仕方ないので、~/.oh-my-zsh/themes/agnoster.zsh-theme
で定義されている build_prompt()
関数を自分の ~/.zshrc の中でオーバーライドすることにした。
agnoster.zsh-theme
を覗くと次のようになっていたので、それで行けそうだと思った。
$ tail ~/.oh-my-zsh/themes/agnoster.zsh-theme
## Main prompt
build_prompt() {
RETVAL=$?
prompt_status
prompt_virtualenv
prompt_aws
prompt_context
prompt_dir
prompt_git
prompt_bzr
prompt_hg
prompt_end
}
PROMPT='%{%f%b%k%}$(build_prompt) '
shrink-pathを設定し、プロンプトをいい感じに調整
shrink-pathは標準プラグインとしてoh-my-zshに同梱されている。
https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/shrink-path
このパスにREADME.mdも置かれているので、読むと使い方がわかる。
利用するには .zshrc 内で plugins+=(shrink-path)
すればいい。
それから、 PROMPT
や RPROMPT
内に '$(shrink-path -f)'
と記すと、ホームディレクトリからの絶対パスで、親ディレクトリは先頭1文字に縮めて表示してくれる。
最終的に、agnoster.zsh-themeの build_prompt()
関数を次のように書き換えた:
build_prompt() {
RETVAL=$?
prompt_status
prompt_segment blue $CURRENT_FG $(shrink_path -f)
prompt_git
prompt_end
}
これで下のような感じになった。
zsh-autosuggestionsをインストールして設定
https://github.com/zsh-users/zsh-autosuggestions
INSTALL.md に従って、次のコマンドを実行:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
残念ながら今の環境は256色に対応してないみたいで、次のように設定した:
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=green,bold"
下のような感じでサジェストが出る。
Ctrl+e
or Ctrl+f
でサジェスト候補を選択できる。
参考:
もうこれは完全にfishと言っていいだろう。
…というか、自分にとってはfishをセットアップするより楽だった気がする。
今回の変更は次の2コミットに該当する:
- dotfilesの変更: https://github.com/progrhyme/myenv/commit/b4ef98a8b1ef9ae6f0a39532590d79c8161fc161
- セットアップスクリプトへの反映: https://github.com/progrhyme/myenv/commit/96a552660c9b79dcf73a1e87a8fc6664d33864f4
※oh-my-zshが勝手に PAGER=less
と LESS=-R
を設定していやがったので、.zshrc内でunsetしている。
MacBookでもoh-my-zshをセットアップ
Ubuntuと同様で、特にハマることはなかった。
セットアップコードのリファクタリングを行った。
- リファクタ: https://github.com/progrhyme/myenv/commit/dac7a0695ec3d81269d0adc6bfc9c2750753be3a
- macOS用の対応: https://github.com/progrhyme/myenv/commit/e35842708298c0803a2f655affc56d3c653f61af
MacBookにiTerm2を入れて設定してみた
iTerm2良いよーっていうミームを受け取ったので、試しに使ってみることにした。
See also Software > ターミナル > iTerm2
Install
https://iterm2.com/downloads.html から最新安定版を入手して普通にインストール。
初期設定
とりあえず Preferences > Profiles
で「Default」プロファイルを弄る:
- Colors … デフォルトの「Dark Background」をベースに微調整
- Text
- フォントを「Roboto Mono for Powerline」の16ptに
- よくわからんが「Blinking text」にチェック
- 「Use built-in Powerline glyphs」にもチェックしてみた。フォントの見た目がちょっと変わった
- Window
- 透明度を適当に設定
- Settings for New Windows
- 幅と高さをいい感じに調整
- Screen: 「Screen with Cursor」にした
- Terminal …
Scrollback lines
を「3000」にした
NOTE:
- Colors:
Cursor Colors > Cursor Boost
が何の設定なのかわからん- ディレクトリやシェルスクリプトのコメントがCyan.Brightになるのが違和感ある
また、 Preferences > Keys > Hotkey
でホットキーも設定しておく。
なんとなく ⌥ + ⌘ + ENTER
にした。
参考:
Shell Integrationの導入
俺よりiTerm使いこなしてるやつおる? - ハイパーマッスルエンジニアになりたいによれば、とりあえずShell Integrationは入れろということらしい。
ので、素直に入れてみる。
https://www.iterm2.com/documentation-shell-integration.html
のガイドに従い、次のコマンドでzsh用のスクリプトを取得:
curl -L https://iterm2.com/shell_integration/zsh \
-o ~/.iterm2_shell_integration.zsh
読み込むと、プロンプトの左端に小さな矢印がついて、実行コマンドの成否がわかる。
機能がagnosterのプロンプトと被っているので、.zshrcを次のように変更して、iTerm2のShell Integrationを有効化したら、agnosterのプロンプトを調整することにした。
そういえばこれ、iterm2_shell_integration.zsh を読み込んだ後に PROMPT
を設定してるけど、ちゃんと動いてるな。不思議だ。。
Auto Command Completionも有効にしてみた。
これをONにすると、zsh-autosuggestionの方はカニバって動かないようだったので、Shell Integrationが有効なときはzsh-autosuggestionを使わないようにした:
それにしても、Shell Integrationの機能の多くは既にpecoで実現していたな。。
(追記)Auto Command Completionはたくさん表示されると迷うし、タブ補完が効かなくなってちょっとお節介な感じなので、やっぱりzsh-autosuggestionに戻した。
所感
慣れたら少しは生産性上がるかも。
iTerm2だとVimのdefault colorschemeの設定が変わっている
なぜかわからないが、ターミナル.appと比べると :highlight
の結果にだいぶ差があった。
iTerm2が256色対応だから?
.vimrc で colorscheme elflord
を設定するとややマシになった。