🦁

zshrcを分割する。fzfで開いたりする。

2023/04/22に公開

~/.zshrcを分割したい

~/.zshrc の中身が多くなってきたので分割しました。自分メモです。

環境:Mac Ventura, Ubuntu22.04

参考

https://fnwiya.hatenablog.com/entry/2015/11/03/191902

(私の)やりかた

~/.zsh.d/ フォルダを作って、この中に分割するファイルを自由に作成します。このとき拡張子は.zshにします(あとで読み込むときのため)。

下は私の分割例です。profile.zsh にだけ環境固有の情報(export ... とか)を入れて、あとのファイルは共有してもよい管理にしています。

.zshrc
/.zhs.d
├── alias.zsh
├── assume_role.zsh
├── git.zsh
├── history.zsh
└── profile.zsh

~/.zshrcのスクリプト中に、分割した情報を読み込む部分を入れます。
この例ではprofile.zshを先に読み込むようにしています。(使い方によっては不要なステップかも)

~/.zshrc
### split zsh
ZSHHOME="${HOME}/.zsh.d"

if [ -d $ZSHHOME -a -r $ZSHHOME -a \
     -x $ZSHHOME ]; then

    # Source the .profile.zsh file first
    profile_zsh="$ZSHHOME/profile.zsh"
    if [ -f "$profile_zsh" -o -h "$profile_zsh" ] && [ -r "$profile_zsh" ]; then
        . "$profile_zsh"
    fi

    # Source the remaining zsh files
    for i in $ZSHHOME/*; do
        if [ "$i" != "$profile_zsh" ]; then
          [[ ${i##*/} = *.zsh ]] && [ \( -f $i -o -h $i \) -a -r $i ]  && . $i
        fi
    done
fi

GUIで管理

(VSCodeでの使用を想定)

分割すると、開くのが面倒になったりします。fzfでGUIで選択して開けるようにしました。インストール方法はfzfの公式Githubにあります。

このような選択画面になります。複数同時に開くこともできます。

fzfを呼び出すshell scriptです。bash open_zsh_files.shをエイリアス登録すると便利かもしれません。

open_zsh_files.sh
#!/bin/bash

# Set the file candidates
file_candidates=(~/.zshrc ~/.zsh.d/*.zsh)

# Use fzf to select multiple files
selected_files=$(printf '%s\n' "${file_candidates[@]}" | fzf --reverse --multi)

# Check if any files were selected
if [ -n "$selected_files" ]; then
    # Save the original IFS and set IFS to newline
    OLDIFS=$IFS
    IFS=$'\n'
    # Read selected files into an array
    files=($selected_files)
    # Restore the original IFS
    IFS=$OLDIFS

    # Open the selected files with code
    for file in "${files[@]}"; do
        code "$file"
    done
else
    echo "No files selected."
fi

Discussion