Open5

zshに移行日記

nodamushinodamushi

Zsh に移行

VSCode terminal で Bash が遅い

Windows で Bash (MSYS) を使っていたけれど、何故かどうにも VSCode のターミナルで Bash が非常に反応が遅いという事態になった。

代わりにzsh にしてみたらこちらは反応速度が特に変わらなかったので、 zsh に移行することにした。

Starship

~/.zshrc に以下を記述

eval "$(starship init zsh)"

なお、 Starship は過去に pacman -S mingw-w64-x86_64-starship で入れたと思われる。

Starship より、 zsh の場合は Oh My ZSH! という奴が便利なのかな?

Oh My ZSH!便利ツールがあれば開発しやすい!

履歴の検索

zsh で履歴検索が Ctrl+R でできると聞いたのだが、そもそも履歴が残らない。

以下を .zshrc に記載する必要があるのかな。

HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
setopt share_history
setopt append_history
nodamushinodamushi

Oh My ZSH!

Oh My ZSH! を入れてみたが、Starship以上にゆたぽんフォントと相性が悪いっぽい。

  • Cascadia Mono:
  • ゆたぽん:

ZSH_THEME

ZSH_THEME を amuse にしたらゆたぽんでも問題なくなった。

Oh My ZSH! は結局やめた

これ入れてるだけでだいぶ起動が遅くなるな?

こう、 Emacs と違って流石にシェルは高速で起動してほしい。

というわけで Oh My ZSH! は結局やめた。

nodamushinodamushi

他のプラグイン

コマンドの自動補間

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc

シンタックスハイライト

git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/zsh-syntax-highlighting
echo "source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
nodamushinodamushi

peco

検索履歴の強化

zsh,autojump, pecoで作業効率を上げたい

peco というプログラムを組み合わせて Emacs の anything みたいな履歴検索ができる。

素晴らしい。気に入った。

Windows の場合 peco は Scoop でサクっと入った。

scoop install peco

~/.zshrc に以下を記入。

function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi

    BUFFER=$(\history -n 1 | \
        eval $tac | \
        awk '!a[$0]++' | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

autojumpはいいかな。私は結局ブックマーク的なやつとかも全然使わないし……

過去に移動したディレクトリへの移動

pecoを使ったらターミナルの操作が劇的に効率化できた話

上記の cd を peco で選択する機能をコピペ。 なお、 cdr を使うには、 .zshrc に以下を追加しておく。

autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
nodamushinodamushi

.zshrc

取りあえずこうなった。

eval "$(starship init zsh)"
export LANG=ja_JP.UTF-8
alias ls='ls --color'
alias ll='ls --color -lah'
HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
setopt share_history
setopt append_history
setopt hist_ignore_dups

#peco
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs

function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi

    BUFFER=$(\history -n 1 | \
        eval $tac | \
        awk '!a[$0]++' | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

function peco-get-destination-from-cdr() {
  cdr -l | \
  sed -e 's/^[[:digit:]]*[[:blank:]]*//' | \
  peco --query "$LBUFFER"
}
function peco-cdr() {
  local destination="$(peco-get-destination-from-cdr)"
  if [ -n "$destination" ]; then
    BUFFER="cd $destination"
    zle accept-line
  else
    zle reset-prompt
  fi
}
zle -N peco-cdr
bindkey '^u' peco-cdr

### plugin ###
# git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/zsh-syntax-highlighting
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh