🦉

Oh-My-ZshのAliasを無視する

2024/12/15に公開

zshの設定で、Oh-My-Zshのテーマを使っているのですが、Aliasが勝手に追加されていたことに気づいたので削除するようにしました。

TL;DR

$ZSH/lib/directories.zshが犯人なので消す。

Oh-My-Zshで追加されていたalias

-='cd -'
.='cd ../'
..='cd ../../'
...='cd ../../../'
....=../../..
.....=../../../..
......=../../../../..
1='cd -1'
2='cd -2'
3='cd -3'
4='cd -4'
5='cd -5'
6='cd -6'
7='cd -7'
8='cd -8'
9='cd -9'
...
alias lsa='ls -lah'
alias l='ls -lah'
alias ll='ls -lh'
alias la='ls -lAh'

Oh-My-Zshのエントリーポイントファイル

私のdotconfigでOh-My-Zshを呼び出している部分を探したところ、エントリーポイント $ZSH/oh-my-zsh.sh が見つかりました。

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# THEME
ZSH_THEME="kennethreitz"
...
source $ZSH/oh-my-zsh.sh

Oh-My-Zshが読み込んでいそうなファイルを探す

先ほどのファイルを読むと、lib配下のデータを読んでいそうです。

cat $ZSH/oh-my-zsh.sh
...
# Load all of the lib files in ~/oh-my-zsh/lib that end in .zsh
# TIP: Add files you don't want in git to .gitignore
for lib_file ("$ZSH"/lib/*.zsh); do
  _omz_source "lib/${lib_file:t}"
done
unset lib_file
...

補足:

  • pluginを使っている場合、~/oh-my-zsh/pluginも見る必要がある
  • 自分の場合、pluginを使っていないので、今回は無視した

directory.shがaliasを貼っている

libの中でaliasという単語を使っているファイルを探すと、$ZSH/lib/directories.zshが見つかります。

# Changing/making/removing directory
setopt auto_cd
setopt auto_pushd
setopt pushd_ignore_dups
setopt pushdminus


alias -g ...='../..'
alias -g ....='../../..'
alias -g .....='../../../..'
alias -g ......='../../../../..'

alias -- -='cd -'
alias 1='cd -1'
alias 2='cd -2'
alias 3='cd -3'
alias 4='cd -4'
alias 5='cd -5'
alias 6='cd -6'
alias 7='cd -7'
alias 8='cd -8'
alias 9='cd -9'

alias md='mkdir -p'
alias rd=rmdir

function d () {
  if [[ -n $1 ]]; then
    dirs "$@"
  else
    dirs -v | head -n 10
  fi
}
compdef _dirs d

# List directory contents
alias lsa='ls -lah'
alias l='ls -lah'
alias ll='ls -lh'
alias la='ls -lAh'

(おまけ) 更新用ファイルに削除設定を追加

幸い directory.shに欲しい設定がなかったので、ファイルを削除することにしました。

「Oh-My-Zshの更新」の際にファイルが取り込まれる可能性があるので、「自分のzshの設定更新」の際に、自動検知・削除するように変更します。私は更新用の作業をTaskfileで、コマンド化しています。

  update-zsh:
    dir: worker
    cmds:
      - '[ -f "$ZSH/lib/directories.zsh" ] && rm "$ZSH/lib/directories.zsh" || echo "$ZSH/lib/directories.zsh does not exist"'
      - ./bin/darwin/zsh

実行してみます。

$ task update-zsh
task: [update-zsh] [ -f "$ZSH/lib/directories.zsh" ] && rm "$ZSH/lib/directories.zsh" || echo "$ZSH/lib/directories.zsh does not exist"
task: [update-zsh] ./bin/darwin/zsh
2024/12/15 21:46:55 🚀 Start updating  ../configs/zsh/config  ...

source $HOME/.zshrcをしたところ消えたことが確認できました。

実際に作業したリポジトリ

https://github.com/shunsock/dotfiles

Discussion