コマンドラインでのディレクトリ移動を快適にする sd_cl というスクリプトに関して、 特に補完関連でアップデートしたのでそれについて。
sd_cl
一応Save Directory
とChange to the Last Directly
のつもりで名前を付けました、確か。
元々一番やりたかったのは、GNU screenとかであるウィンドウでのディレクトリに 他のウィンドウから簡単に移動する、と言う事。
これをするために、sd
で今いるディレクトリを記憶し、
cl
でそのディレクトリに移動する、みたいな設定を.bashrcに書いてたのが始まりです。
ディレクトリ保存を外部ファイルに書き出して行ってるので
他のウィンドウでも共通の記憶ディレクトリになって、
一方でsd
して他方でcl
すれば同じディレクトリに行けます。
それを強化して、複数ディレクトリを記憶しておいて、 好きな過去のディレクトリに移動できる様にもしています。
また、Bash/Zshには元々、
ディレクトリを記憶しながら移動するpushd
と
その記憶したディレクトリに移動するpopd
というコマンドが付属しています。
これらを使ってこれまで移動したヒストリにもアクセス出来るようにしています。
(記憶するのはcd
をラップしているだけ。)
移動に使えるリストとして、
sd
で保存したディレクトリ- 移動した履歴
- 事前に
$PREDEFDIRFILE (=~/.predefDir)
にリストしておいたディテクトリ - GNU screen/tmuxで現在使っている各ウィンドウ/Paneのディレクトリ
があります。
$ cl -h
Usage: cl [-lcph] [-n <number> ] [<number>] [<directory>]
If there are no arguments, you will move to the last saved directory by sd command.
If you give any directory name, it searches for it in saved directories
and cd to there if only one is found.
If more than one directories are found, go to the selection mode.
Arguments:
-l Show saved directories
-c Show saved directories and choose a directory
-C Clear directories
<number> Move to <number>-th last directory
-n <number> Move to <number>-th last directory (obsolete)
-N No header for selection window
-p Move to pre-defiend dirctory in ~/.predefDir
-w Move to other window's (screen/tmux) dirctory in ~/.windowDir
-b Move back to moving histories
-v Move from current directory, like Vim
-h Print this HELP and quit
ヘルプはこんな感じ。
cl
だけ打てば保存したディレクトリの最新の所へ移動。
-l
でリストを表示、-c
で選択画面に。
-b
、-p
、-w
でそれぞれ移動した履歴、事前に$PREDEFDIRFILE (=~/.predefDir)
にリストしておいたディテクトリ、
GNU screen/tmuxで現在使っている各ウィンドウ/Paneのディレクトリに
リストを変更します。
補完機能の強化
そもそもZshでまともに動いてなかった部分があったのでその辺修正。
これ書いたのはその辺りの話です。。。
今回の大きな変更点は、補完を与える際、 頭から書かなくても、パスに含まれる文字列を与えると そのディレクトリパスが選択できる様になったことです。
また、その候補が1つしか無ければそのディレクトリに一発で移動します。
こんな感じでTab補完を使って絞り込んだり、 特定の名前のディレクトリにショートカットで飛んだりすることが出来ます。
適当に候補名を入れてその文字列を含むパスが複数あった場合には 選択画面に移動します。
この際、補完を使う場合はオプションを与えないかぎり 上に挙げたリストの全ての候補の中から選ぶ事になります。