Mac 基礎 Part 3 -- 拡張コマンドとエイリアスの設定 in .bashrc
Tags: git, bash
Published: 2022-01-10 15:29:00


## why

作業効率を上げるため。

https://dev.to/kaede_io/vim-vimrc-wo-1-karashu-ku-3j20

Vim の基礎設定も合わせて行うと効果的。

---

## 導入方法

Ubuntu では `~/.bashrc`

M1 Mac では `~/.zshrc`

WSL では `~/.bash_aliase`

にエイリアスを書いて、シェルを再読込すると
使えるようになる。


複数シェルを開いている場合は
全てのシェルで再読込が必要。

```bash
alias re='source ~/.zshrc'
```

ソースコマンドでシェル設定を走らせる。
毎回打つのは面倒なので re にエイリアスしておく。








---
---

# 拡張シェル関数

既存のコマンドを組み合わせて、新しいコマンドを作って手間を減らす。

下記の 3 つを作る

1. cdls
2. mkcd
3. safe_rm

---


## 1. cdls

https://unix.stackexchange.com/a/20413

cd 実行後に ls も実行する

```bash
# cdls
function cd {
  builtin cd "$@" && ls -F
}
```

---

## 2. mkcd

https://unix.stackexchange.com/a/9124

mkdir 実行後に作成したフォルダに cd を実行する

```bash
mkcd () {
  mkdir "$1"
  cd "$1"
}
```

$1 は 引数1 の意味。

普通に mkdir 引数1 して
その後 cd 引数1 する

```php
❯ mkcd ~/Downloads/mktest

~/Downloads/mktest
```

このように、作ったディレクトリに即時に移動できる

---

## 3. safe_rm

chatGPT4 に依頼

rm -rf をしたときに対象のファイルを構造化して表示する。
その後に本当に削除するか確認できる。

```bash
function rm {
  local rf_option=false
  local target_dir=""

  for arg in "$@"; do
    if [ "$arg" = "-rf" ]; then
      rf_option=true
    else
      target_dir="$arg"
    fi
  done

  if [ "$rf_option" = true ] && [ -d "$target_dir" ]; then
    echo "The following files and directories will be removed:"
    echo "----------------------------------------"
    tree "$target_dir"
    echo "----------------------------------------"

    printf "Are you sure you want to delete the above files and directories? [y/N] "
    read confirmation
    if [ "$confirmation" = "y" ] || [ "$confirmation" = "Y" ]; then
      command rm -rf "$target_dir"
      echo "Deleted: $target_dir"
    else
      echo "Deletion canceled"
    fi
  else
    command rm "$@"
  fi
}
```

### 拒否の場合

```bash
rm -rf hoge
The following files and directories will be removed:
----------------------------------------
hoge
├── 2
├── 2.1
├── 3
├── 3.1
├── 3.2
└── bar
    ├── aaa
    ├── bbb
    └── ccc

2 directories, 8 files
----------------------------------------
Are you sure you want to delete the above files and directories? [y/N] h
Deletion canceled
```

### 承認の場合

```bash
...


2 directories, 8 files
----------------------------------------
Are you sure you want to delete the above files and directories? [y/N] Y
Deleted: hoge
```













----
----


# 既存コマンドのエイリアス

---

## cd

https://qiita.com/reireias/items/d906ab086c3bc4c22147#cd%E7%B3%BB

```bash
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
```

---

## ls

ファイル一覧を表示するときの最適化。

```bash
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
```

Ubuntu ではこれがデフォルトで適用されている。

---

# git コマンドのエイリアス

---

## ステージング、コミット関係

```bash
# git staging/commit
alias gs='git status'
alias ga='git add'
alias gcv='git commit -v'
alias gcm='git commit -m'

# git diff
alias gd='git diff'
alias gdc='git diff --cached'

# git push/pull
alias gps='git push'
alias gpsoh='git push origin head'
alias gpl='git pull'
alias gplrau='git pull -r --au'
```

----------------

### スキーマファイルを git status で非表示にする

grep をかませると色が消えるので、オプションが必要

```bash
## git status without schema files with colored
alias gs='git -c color.status=always status | grep -v 'schema\.rb' --color=always | cat'
```

---------------

### ブランチ関係

```sh
# git branch/checkout
alias gb='git branch'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gcm='git checkout master'
alias gcd='git checkout dev'
```

ブランチの表示や切り替え、作成などのコマンドも短くする

```sh
gs
fatal: not a git repository (or any of the parent directories): .git
```

sh の再起動後、コマンドをたたいてこうなれば読まれている。

---
---

# コマンドの一文字エイリアス

g や k を打ったら git や kubectl に決まっている。
なので 一文字でコマンドになるようにした。

```bash
## tool shorten alias

alias g='git'
alias dc='docker-compose'
alias k='kubectl'
alias skf='skaffold'
```

docker-compose などを短くする

---
---

# 外部シェルコマンド

brew などで新しく入れる便利コマンド。

jump の他にも fzf, htop, jq などがある

## jump

移動を楽にするコマンド

https://github.com/gsamokovarov/jump

Mac は brew install jump

Ubuntu は 
```php
wget https://github.com/gsamokovarov/jump/releases/download/v0.51.0/jump_0.51.0_amd64.deb && sudo dpkg -i jump_0.51.0_amd64.deb
```

インストールした後は

```zsh
eval "$(jump shell zsh)"
```

これを .zshrc に入れるように指示される。
これを入れて zsh をリフレッシュすると使えるようになる。

普段 ~/source/projectName/kotlin/com/domain/post.kt

とかをよく使う場合、 j post だけで移動できる。
j domain まで打っても
j domain/post.kt のように補完が出たりはしない。