6 日目担当の @tsubasaogawa です。5 日目は @yk-m さんの「iOS11 / iPhone X 対応をした話」でした。
この記事は以下について書かれています
- Bash における pushd と dirs の使い方
- peco を使って両者をちょっと便利に使う tips
解決したいこと
- 過去に移動したディレクトリへ戻りたい
- けど打つのが面倒
- むしろパスの一部を忘れた
解決案: pushd と dirs
各コマンドについて
- pushd: 基本的には
cd
と同じ。これに加えて、カレントディレクトリの絶対パスを スタック する - dirs: スタックした一覧を表示
popd
というコマンドもありますが、今回は使いません。
使い方
$ pushd /var
/var
$ pushd cache/
/var/cache /var
(中略)
$ pushd epel/
/var/cache/yum/x86_64/6/epel /var/cache/yum/x86_64/6 /var/cache/yum/x86_64 /var/cache/yum /var/cache /var
$ pwd
/var/cache/yum/x86_64/6/epel
$ dirs -v
0 /var/cache/yum/x86_64/6/epel
1 /var/cache/yum/x86_64/6
2 /var/cache/yum/x86_64
3 /var/cache/yum
4 /var/cache
5 /var
pushd +[番号]
で一気にジャンプできます。
$ pushd +4
/var/cache /var /var/cache/yum/x86_64/6/epel /var/cache/yum/x86_64/6 /var/cache/yum/x86_64 /var/cache/yum
$ pwd
/var/cache
dirs ~ pushd +[番号] するのが地味に面倒です。
peco を使って少しラクに移動する
peco について
- お馴染みのあの娘です。詳しくは 公式 へ
.bashrc にエイリアスとファンクションを追加
- pushd へのエイリアス
pd
- 普段の移動はコレ
- pushd + dirs + peco を使ったファンクション
pds
- 過去のディレクトリに戻りたくなったらコレ
.bashrc
alias pd='pushd'
# 慣例に習うなら関数名は peco-pushd がいいかも
function pds() {
# peco が無ければ何もしない
! which peco >/dev/null 2>&1 && echo 'please install peco' 1>&2 && return 1
# dirs -v の結果を peco でフィルタリングして、キューの番号を取得
local pushd_number=$(dirs -v | peco | perl -anE 'say $F[0]')
# peco が強制終了されたら何もしない
[[ -z $pushd_number ]] && return 1
# 移動
pushd +$pushd_number
return $?
}
実行例
さいごに
- 工夫次第でまだまだ改善の余地があります。peco を普段の作業にどう組み込むと便利か? について考えると楽しいです。fzf 版も試してみたいです。
- zsh では
cd
+ 補完機能で実現できるようです (zshでディレクトリスタックを手軽に移動する) - 参考: ディレクトリの移動は cd コマンドよりも pushd コマンドのほうが便利!
- そして書いてから気付く、本記事の車輪の (再^n) 発明感 (さらに高度な) ご参考:
明日 7 日目は @esu_eichi さんです。お楽しみに。