2020-05-16

5/16

zshをfishっぽくいい感じにできた

5/13にfishでちょっといいと思った機能はzshでもできそうだと気がついたので、やってみた。
…で、やってみたらできた。

作業環境はUbuntu 18.04.

やったこと:

  1. oh-my-zshをインストール
  2. テーマを選ぶ
  3. shrink-pathを設定し、プロンプトをいい感じに調整
  4. 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) すればいい。

それから、 PROMPTRPROMPT 内に '$(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
}

これで下のような感じになった。

terminal screenshot with oh-my-zsh

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"

下のような感じでサジェストが出る。

screenshot of zsh-autosuggestions

Ctrl+e or Ctrl+f でサジェスト候補を選択できる。

参考:

もうこれは完全にfishと言っていいだろう。

…というか、自分にとってはfishをセットアップするより楽だった気がする。

今回の変更は次の2コミットに該当する:

※oh-my-zshが勝手に PAGER=lessLESS=-R を設定していやがったので、.zshrc内でunsetしている。

MacBookでもoh-my-zshをセットアップ

Ubuntuと同様で、特にハマることはなかった。

セットアップコードのリファクタリングを行った。

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 を設定するとややマシになった。

参考: vimrc#colorscheme