【zsh】zinitでプラグイン管理

2021.10.28
2024.03.24
開発環境
zinitzsh

はじめに

zshでのプラグイン管理でzinitを利用する方法について紹介していきます。

zinitはできることが多いので、今回はとりあえず使い始めてみることを目標に解説します。

zinitとは

zinitとは、zshのプラグインマネージャーです。要は、プラグインを管理するツールになります。

zinitは速いみたいで、oh-my-zshやpreztoのzshフレームワークもサポートしているようです。

zshのプラグインマネージャーは以下のようなものがあります。

スターだけでみるとzplugが多いですが、zinitの方がコミット数が多かったり、最近のコミットがあったりします。(2021/10/27時点)

インストール

まずはzinitをインストールします。

1sh -c "$(curl -fsSL https://git.io/zinit-install)"

インストールができると~/.zshrcに下記の内容が追記されます。

1### Added by Zinit's installer                                                                                                                                             │
2if [[ ! -f $HOME/.zinit/bin/zinit.zsh ]]; then                                                                                                                             │
3    print -P "%F{33}▓▒░ %F{220}Installing %F{33}DHARMA%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"                                                   │
4    command mkdir -p "$HOME/.zinit" && command chmod g-rwX "$HOME/.zinit"                                                                                                  │
5    command git clone https://github.com/zdharma-continuum/zinit "$HOME/.zinit/bin" && \                                                                                             │
6        print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \                                                                                                       │
7        print -P "%F{160}▓▒░ The clone has failed.%f%b"                                                                                                                    │
8fi                                                                                                                                                                         │
910source "$HOME/.zinit/bin/zinit.zsh"                                                                                                                                        │
11autoload -Uz _zinit                                                                                                                                                        │
12(( ${+_comps} )) && _comps[zinit]=_zinit                                                                                                                                   │
13### End of Zinit's installer chunk

~/.zshrcを読み込んで、zinitをリロードします。

1source ~/.zshrc
2
3zinit self-update

これでzinitを利用する準備は完了です。

プラグインの追加

プラグインの追加には2つの方法があります。

  • load:トラッキングあり
  • light:トラッキングなし(高速)

基本は以下のようにlightを使えばいいと思います。

1zinit light zsh-users/zsh-completions
2zinit light zsh-users/zsh-autosuggestions

zinit iceとは?

zinit iceは、次に続くzinitコマンドのオプション的なものを指定できます。

以下のように後続のコマンドの動作を指定します。飲み物に入れる「氷」のように追加されるものという意味でiceだそうです。

1zinit ice wait lucid
2zinit light zsh-users/zsh-completions

waitで遅延ロードし、lucidでロードした時にコンソールに情報が出力されるのを省略させています。

iceでさまざまな挙動を制御できます。

Alternate Ice Syntax - Zinit Wiki

設定紹介

参考程度に現状の私の.zshrcを記載しておきます。

1# ---------------------------------------------------------
2# Enable Powerlevel10k
3# ---------------------------------------------------------
4
5# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
6# Initialization code that may require console input (password prompts, [y/n]
7# confirmations, etc.) must go above this block; everything else may go below.
8if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
9  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
10fi
11
12# ---------------------------------------------------------
13# Zinit's installer
14# ---------------------------------------------------------
15if [[ ! -f $HOME/.zinit/bin/zinit.zsh ]]; then
16    print -P "%F{33}▓▒░ %F{220}Installing %F{33}DHARMA%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
17    command mkdir -p "$HOME/.zinit" && command chmod g-rwX "$HOME/.zinit"
18    command git clone https://github.com/zdharma-continuum/zinit "$HOME/.zinit/bin" && \
19        print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \
20        print -P "%F{160}▓▒░ The clone has failed.%f%b"
21fi
22
23source "$HOME/.zinit/bin/zinit.zsh"
24autoload -Uz _zinit
25(( ${+_comps} )) && _comps[zinit]=_zinit
26
27# ---------------------------------------------------------
28# plugin list
29# ---------------------------------------------------------
30
31zinit ice wait lucid
32zinit light zsh-users/zsh-completions # 補完
33zinit ice wait lucid
34zinit light zsh-users/zsh-autosuggestions # 補完
35zinit ice wait lucid
36zinit light zsh-users/zsh-syntax-highlighting
37zinit ice wait lucid
38zinit  light chrissicool/zsh-256color
39zinit ice depth=1
40zinit light romkatv/powerlevel10k
41
42# ---------------------------------------------------------
43# basic
44# ---------------------------------------------------------
45
46# 履歴保存管理
47HISTFILE=$ZDOTDIR/.zsh-history
48HISTSIZE=100000
49SAVEHIST=1000000
50
51# 他のzshと履歴を共有
52setopt inc_append_history
53setopt share_history
54
55# ---------------------------------------------------------
56# alias
57# ---------------------------------------------------------
58
59alias ls='ls -G'
60alias python="python3"
61alias pip="pip3"
62
63# ---------------------------------------------------------
64# prompt
65# ---------------------------------------------------------
66
67# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
68[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
69
70# ---------------------------------------------------------
71# completion
72# ---------------------------------------------------------
73
74# コマンド補完
75autoload -Uz compinit && compinit
76
77# 小文字でも大文字にマッチ
78zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
79
80# 補完候補をTabや矢印で選択可能
81zstyle ':completion:*:default' menu select=1
82
83# ---------------------------------------------------------
84# hight-light
85# ---------------------------------------------------------
86
87# サジェストの色変更
88ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=244"
89
90# lsコマンドで色分けする
91zstyle ':completion:*' list-colors $LSCOLORS
92
93# ---------------------------------------------------------
94# peco
95# ---------------------------------------------------------
96
97# コマンド履歴検索 ctrl+r
98function peco-history-selection() {
99  BUFFER=`history -n 1 | tac  | awk '!a[$0]++' | peco`
100  CURSOR=$#BUFFER
101  zle reset-prompt
102}
103zle -N peco-history-selection
104bindkey '^R' peco-history-selection
105
106# コマンド履歴からディレクトリ検索・移動 ctrl+e
107if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
108  autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
109  add-zsh-hook chpwd chpwd_recent_dirs
110  zstyle ':completion:*' recent-dirs-insert both
111  zstyle ':chpwd:*' recent-dirs-default true
112  zstyle ':chpwd:*' recent-dirs-max 1000
113  zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/chpwd-recent-dirs"
114fi
115function peco-cdr () {
116  local selected_dir="$(cdr -l | sed 's/^[0-9]* *//' | peco)"
117  if [ -n "$selected_dir" ]; then
118    BUFFER="cd ${selected_dir}"
119    zle accept-line
120  fi
121}
122zle -N peco-cdr
123bindkey '^E' peco-cdr
124
125# カレントディレクトリ以下のディレクトリ検索・移動 ctrl+x
126function find_cd() {
127  local selected_dir=$(find . -type d | peco)
128  if [ -n "$selected_dir" ]; then
129    BUFFER="cd ${selected_dir}"
130    zle accept-line
131  fi
132}
133zle -N find_cd
134bindkey '^X' find_cd
135

まとめ

  • zinitでzshプラグインの管理ができる

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee