cdx
cdx
は僕が一人でメンテしてる cd
コマンドのラッパーです。この手のツールでよく使われているのは、enhancd
やz
などがあります。
とくにenhancd
は非常に強力なツールで、利用している方も多いと思います。
cdx
ではCustomSource
という設定項目を用意しました。これを利用することでenhancd
の持つような機能はユーザー側が設定として与えることが出来ます。そのかわりcdx
は僕が素の状態である程度使えるような機能だけを実装したものになります。
要求環境
- Go lang (v1.10.2 以上)
- 実装にはGoを使いました。最近はじめて面白いなと思いました。CLIツールを作るならGoはいい感じですね
- bash or zsh
- fishは対応していません
- fzfやpecoみたいなFuzzy-Finder
インストール
go get
するか、GitHubのReleaseページからバイナリをダウンロードしてパスの通ったところに置いてください
$ go get github.com/xztaityozx/go-cdx
- お好みのFuzzy-Finderを用意します。個人的には
fzf
がすきです。fzy
と言うやつもいいらしいですね
- コンフィグを書いて置きます
$ mkdir -p ~/.config/go-cdx $ cat << EOF > ~/.config/go-cdx/.go-cdx.json { "HistoryFile": "~/.config/go-cdx/history.json", "BookMarkFile":"~/.config/go-cdx/bookmark.json", "Command":"pushd", "NoOutput":true, "Make":false, "CustomSource":[], "FuzzyFinder":{ "CommandPath":"選んだFuzzy-Finder", "Options":[] }, "BinaryPath":"go-cdxへの絶対パス。go getした場合は消してOK" } EOF $ vim ~/.config/go-cdx/.go-cdx.json # 好きなように設定してください
設定値はGitHubのREADMEに書いてあるのでそちらを見てください
cdx
をロードします。
# cdxをロード $ eval "$(go-cdx --init)" # シェル起動時に自動でロードするならrcに記述すればOK $ echo 'eval "$(go-cdx --init)"' >> ~/.zshrc # or ~/.bashrc
使い方
cdx [-A,--action [act]| --add| -b,--bookmark| --config [configFile]| --cs-list| -c,--custom [name]| --help| -h,--history| --init| --make| --no-output| -p,--popd| -v,--version] [PATH]
基本はcd
コマンドと同じように使います
$ cdx ~/ # change to home $ cdx ~/Utils # change to ~/Utils
-A,--action [act]
このオプションでは移動した後にそのディレクトリで実行するコマンドを指定できます
$ cdx ~/Utils --action "ls" go-cdx go-cdx.v1.0.13 go-cdx.v1.0.13.tar.gz ... $ pwd /home/xztaityozx/Utils
コマンドはbash -c
に渡されて実行されることに注意してください
--add
ブックマークにカレントディレクトリを追加します。重複のチェックをしないので注意してください
-b,--bookmark
bookmarkからFuzzy-Finderを使って1つ選択し、cd
します。
$ cdx -b > 3/3 > [ 3] /path/to/hoge [ 2] /path/to/fuga [ 1] /path/to/foo
--config [configFile]
デフォルトのコンフィグの代わりになるコンフィグファイルを指定できます。デフォルトは~/.config/go-cdx/.go-cdx.json
です
--cs-list
後に説明するCustomSource
からのcd
の一覧を表示して終了します
-c,--custom [name]
Goでcdx
を書き直すにあたって、追加した目玉機能です
cdx
は複雑な機能を単体で持ちませんが、代わりにユーザーが機能を自由に追加することが出来ます。これをCustomSource
とよんでいます
CustomSource
は、その 名前 と Fuzzy-Finderに与える入力 のペアで構成されます。
{ "CustomSource":[ { "Name":"g", "Command":"ghq list | xargs -n1 -I@ echo 'echo -e \"$(basename @) $(ghq root)/@\"'|bash|column -t" }, ] }
この例では、 ghq list
で表示されるリポジトリ一覧から1つ選んでcd
するg
という名前の機能を追加しています
# Fuzzy-Finderに与える入力 $ ghq list | xargs -n1 -I@ echo 'echo -e \"$(basename @) $(ghq root)/@\"'|bash|column -t "Contest /home/xztaityozx/.ghq/github.com/xztaityozx/Contest" "cdx /home/xztaityozx/.ghq/github.com/xztaityozx/cdx" "dotfiles /home/xztaityozx/.ghq/github.com/xztaityozx/dotfiles" "nandokuka /home/xztaityozx/.ghq/github.com/xztaityozx/nandokuka" "yov /home/xztaityozx/.ghq/github.com/xztaityozx/yov" # cdx のCustomSource gを使ってみる $ cdx -c g > 19/19 > Contest /home/xztaityozx/.ghq/github.com/xztaityozx/Contest cdx /home/xztaityozx/.ghq/github.com/xztaityozx/cdx dotfiles /home/xztaityozx/.ghq/github.com/xztaityozx/dotfiles nandokuka /home/xztaityozx/.ghq/github.com/xztaityozx/nandokuka yov /home/xztaityozx/.ghq/github.com/xztaityozx/yov
この機能を使って、Fuzzy-Finderで選択された行のいちばん後ろのカラムが、移動先のパスとして選択されることに注意してください
CustomSource
でオレオレcdx
を作ることが出来ます
--help
ヘルプを出力して終了します
-h,--history
履歴をFuzzy-Finderで選択してcd
します。ログアウトしても履歴はリセットされません
--init
cdx
をロードするときにのみ使います
--make
移動しようとする先が存在しないディレクトリだった場合、作成するか訪ねます。yesと答えた場合のみ、ディレクトリを作成しcd
します
--no-output
cdx
からの出力を無効化します。Fuzzy-Finderや--action
出力は表示されます。
-p,--popd
popd
を実行して終了します
-v,--version
バージョン情報を出力して終了します
終わり
cdx
をよろしくお願いいたします