0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2024年11月版 zsh 設定

Posted at

はじめに

約7年ぶりに Mac を買い替えたので zsh の設定を最新化してみようと思います。

筆者はこれまで5年以上 fish を主に使用しており、 zsh はメインで使っていませんでした。
当時は fish では設定に大きく手を加えずとも快適なターミナル環境が得られたため、非常に満足していました。

今まで使っていた fish の設定

しかし、 fish は変数の設定方法等の構文が bash と異なるため、他人が公開しているコマンドをそのままコピペで使用できない場合があり、不便さを感じていました。
また、近年 zsh も進化し、もはや fish よりも使い勝手が良くなっているのではないかと思い、zsh に改めて入門してみようと思います。

以前執筆したこちらの記事をベースに設定を最新化してみます。

環境

  • MacBook Pro 14inch 2023/11
  • チップ: Apple M3 Pro
  • メモリ: 36GB
  • macOS: Sonoma 14.6

参考

brew install

参考記事に従い、使えそうなソフトをインストールしていきます。

brew install zsh-completions
brew install zsh-autosuggestions
brew install fzf
brew install ghq

zshrc

もともと使っていた設定に参考記事からの設定を追加し、完成です。

.zshrc
# alias
alias ls='ls -F --color=auto'
alias la='ls -laF --color=auto'
alias lah='ls -lahF --color=auto'
alias ga='git add . '
alias gb='git branch '
alias gc='git checkout '
alias gcb='git checkout -b '
alias gcm='git commit -m '
alias gs='git status '
alias gl='git log --oneline '

# 新しいコマンドを即認識させる
zstyle ":completion:*:commands" rehash 1

# 色を使用
autoload -Uz colors
colors
# 色の設定
export LSCOLORS=Exfxcxdxbxegedabagacad
# 補完時の色設定
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'

# 補完
autoload -Uz compinit
compinit

# history
HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000
# 他のターミナルとヒストリーを共有
setopt share_history
# ヒストリーに重複を表示しない
setopt histignorealldups
# ヒストリーに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks
# ヒストリーを呼び出してから実行する間に一旦編集できる状態になる
setopt hist_verify

# prompt
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr '%F{yellow}!'
zstyle ':vcs_info:git:*' unstagedstr '%F{red}+'
zstyle ':vcs_info:*' formats ' %F{green}%c%u(%b)%f'
zstyle ':vcs_info:*' actionformats ' (%b|%a)'
precmd () { vcs_info }
PROMPT='%F{yellow}[%*]%f%F{green}%m%f:%F{cyan}%~%f${vcs_info_msg_0_}\$ '

# zsh-completions
  if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

    autoload -Uz compinit
    compinit
  fi

# fzf history
function fzf-select-history() {
    BUFFER=$(history -n -r 1 | fzf --query "$LBUFFER" --reverse)
    CURSOR=$#BUFFER
    zle reset-prompt
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history

# cdr自体の設定
if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
    autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
    add-zsh-hook chpwd chpwd_recent_dirs
    zstyle ':completion:*' recent-dirs-insert both
    zstyle ':chpwd:*' recent-dirs-default true
    zstyle ':chpwd:*' recent-dirs-max 1000
fi

# fzf cdr
function fzf-cdr() {
    local selected_dir=$(cdr -l | awk '{ print $2 }' | fzf --reverse)
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N fzf-cdr
setopt noflowcontrol
bindkey '^q' fzf-cdr

# fbr - checkout git branch
fbr() {
  local branches branch
  branches=$(git --no-pager branch -vv) &&
  branch=$(echo "$branches" | fzf +m) &&
  git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}

おわりに

コマンドの補完や履歴の遡りなど、今まで fish で使ってきた機能は概ねカバーすることができました。
しかし、現時点の設定では fish と違いコマンドに syntax が効かないことや、入力中にコマンドの候補が表示されないなどの不満点もあり、改善の余地がまだある状況です。
もしこれらの問題を解決する方法をご存じの方は、ぜひコメントで教えて下さい。
それ以外にも「こんなカスタマイズをしているよ」という方もコメントで教えていただけると嬉しいです。

最後までお読みいただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?