LoginSignup
9
3

More than 5 years have passed since last update.

pushd と dirs を peco でちょっと便利に使う

Last updated at Posted at 2017-12-05

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 $?
}

実行例

pds.gif

さいごに

明日 7 日目は @esu_eichi さんです。お楽しみに。

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3