rcmdnk's blog
Last update

マンガで身につく超高速勉強法

ブラウザ等だと戻るボタンや進むボタンがあり履歴をたどれますが、 ターミナルのディレクトリ移動では簡単には出来ません。

それを複数の過去の履歴を残し、さらに戻った場合にはまた進むことも出来るようなことを実現し、 さらにそれを高速で行える様な設定を作りました。

Sponsored Links

sd_cl

sd_clはディレクトリ移動のためのツールです。

ディレクトリを保存しておいてそこに移動したり、 使ったディレクトリをランキング付しておいてよく使うディレクトリに素早く移動したり出来ます。

このsd_clをロードすることでbdfdまたupというコマンドも使える様になります。

bd/fd/up

sd_clをロードすることでbdfdというコマンドが使える様になります。

これはsd_clcl -b/cl -fへのラッパー関数です。

cdで移動する毎に履歴に保存していき、bdとすると一つ前に戻ります。

戻ると今度は進む履歴の方にディレクトリを保存し、fdで進むことが出来るようになります。

複数個前とかに戻ることも出来て、 ちょっと混乱しかねますが、0から始まる数で決めます。

つまりbd 0は単なるbdと一緒。bd 1で2つ前に居た時のディレクトリ、bd 2で3つ前…と言った感じ。 fdについても同様です。

もう一つ、upというコマンドも使えるようになり、これを使うと 一つ上のディレクトリに移動できます。

キーバインドして高速に移動する

コマンドとして利用しても便利は便利ですが、 キーバーンド設定することでさらに高速に移動できる様になります。

以下の様な設定がsd_clの中に入っていて 自動的にキーバインドが設定されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if [ -n "$ZSH_VERSION" ];then
  _zsh_bd () {
    bd >/dev/null
    zle reset-prompt
  }
  _zsh_fd () {
    fd >/dev/null
    zle reset-prompt
  }
  _zsh_up () {
    up >/dev/null
    zle reset-prompt
  }
  zle -N bd _zsh_bd
  zle -N fd _zsh_fd
  zle -N up _zsh_up

  if [ "$SD_CL_ZSH_KEYBIND" = 1 ];then
    bindkey '^[o' bd
    bindkey '^[i' fd
    bindkey '^[u' up
  fi
elif [ -n "$BASH_VERSION" ];then
  if [ "$SD_CL_KEYBIND" = 1 ];then
    bind '"\eo": "\C-ubd\C-m"'
    bind '"\ei": "\C-ufd\C-m"'
    bind '"\eu": "\C-uup\C-m"'
  fi
fi

追記: 2018/08/21

Bashのキーバインドもスクリプト内に追加。

追記ここまで

もし自動的にやりたくなかったり別のキーに設定したい場合には SD_CL_KEYBINDING=0を設定して好きなbindkeyを上の様な感じで .zshrc.bashrc書いたりしてください。

これで

  • Meta(Alt or Cmd)-o: 一つ前に戻る
  • Meta(Alt or Cmd)-i: 一つ先に進む
  • Meta(Alt or Cmd)-u: 一つ上に上がる

と言ったディレクトリ操作ができるようになります。

実際にやってみたのがこちら。

Bashバージョン

bd/fd bash

Zshバージョン

bd/fd zsh

表示の中でとの組み合わせの様に出てますが、 これはiTerm上でをメタキーとして使用する設定があり、 それをで使うためにKarabiner-Elementで送るキーをからに 変換しているためです。

なので実際に送ってるボタンはになっています。

WindowsならAltです。

Bashの場合には指定コマンドを通常の実行をする様な形でコマンドが表示されますが、 Zshでは設定次第でその場を動かず指定関数を実行することが出来ます。

下のZshの例ではその場でプロンプトに表示されてるディレクトリが変更されてるのがわかると思います。

キーバインドですが、これは今は亡きVimperatorでブラウザの戻る、進むを Ctrl-oCtrl-iに設定していたのでこれにしたかったのですが、 特にCtrl-iTabそのものなので設定してしまうとタブ操作が全ておかしくなってしまうので メタキーの方に設定しています。 (Ctrl-oEnterとは別物ですがEnterの様な動作をするものです。)

Meta-bMeta-fは1単語戻る、進む、に割り当てられてるので避けた方が良いかと。 ctrl-bctrl-fは1文字戻る、進む、です。

Sponsored Links
Sponsored Links

« Bash/Zshで配列のn番目を取得する、を統一する DHCPでホスト名が配られる環境にノートPCを持っていた時に起こった問題 »