といってもだいぶ前からあるんだけどね
既存のコマンドをシェルスクリプトで魔改装するの最高
cd
のwrapperと言えばenhancd
とかfish
のz
がありますね
github.com
github.com
実は僕もcdx
という同じようなコマンドを作っていて、それは2016年の年末にここでも紹介しました
xztaityozx.hatenablog.com
そもそもcdx
は快適にcd
したいと思い、ggる前にシェルスクリプトを書き始めたのが最初でした。このときにちゃんとggってればenhancd
に出会えたでしょう
そしてなぜenhancd
の存在を知ってもなお自前のものを使っていたのか、それは単なる愛着にすぎません
2016年の段階ではenhancd
やz
にcdx
が勝る点が無かったんですが、「自分のつくったものだし・・・」と思ってメンテをしてきました
そしてenhancd
などにインスパイアされたりして、いくつか機能を付け、自分なりに使いやすくしたので公開しようと思います(それでもenhancd
を上回ることはできないでしょう たぶん)
cdx
(ぼくはこういうデザインが好きです)
README.mdにもつらい英語と日本語でいろいろ書いていますがここでも
デモ
cdx
の主な機能は以下です
- 移動履歴から
cd
できる - ブックマークから
cd
できる enhancd
のようにfzf
やpeco
を使ってファジーサーチできる~/.ssh/config
を読んでssh
ログインできる- 移動先ディレクトリが無いときは作ってから移動できる
などです。全部あんなこといいなできたらいいなで実装したものです
動作環境
bashシェルスクリプトなのでbashを使っている人向けです
普通のシェルスクリプトならそうではないのですがcdx
はsource
コマンドでcd
を反映するのでzsh
やfish
では使えないと思います・・・
改良したいですね
あとはpeco
とか`fzf
みたいなインタラクティブフィルターがあるともっといいと思います。
インストール
git clone https://github.com/xztaityozx/cdx
cd cdx
./install.sh
使い方
cdx [OPTION] PATH
使い方はcd
とほぼ同じです。cd
よりはオプションの数が多いです
オプション
cdx
ではいくつかオプションを用意しています。これによって機能のオンオフができます
Option | Action |
---|---|
–help | ヘルプを表示します |
–fuzzy | パスの補完や履歴、ブックマークの取得にfzf やpeco のようなファジー検索ツールを使用します。使用するツールはCDX_FUZZY_COMMAND 変数へ書き込む必要があります |
–cd | cdx ではデフォルトでpushd コマンドを使うようにしていますがこれをcd に置き換えます |
–ls | cd した後に自動的にls コマンドを実行します |
-h | 履歴からcd します。これには–fuzzyオプションが必要です |
-b | ブックマークからcd します。これには–fuzzyオプションが必要です |
+b | カレントディレクトリをブックマークに追加します |
-p | cd やpushd の代わりにpopd を実行します |
–automake | 移動先が見つからなかったとき自動的にディレクトリを作りcd します |
–make | 移動先が見つからなかったときにディレクトリを作ってもいいか尋ねます |
–ssh | cdx にssh を許可します。これをオンにして~/.ssh/config にあるホスト名を与えるとssh ログインを試みます。もし同じ名前のディレクトリがある場合はcd が優先されます |
これらのオプションを毎回つけるのは面倒だと思ったのでCDX_DEFAULT_OPTS
変数に書いてあるオプションをcdx
が自動的にオプションに加えるようにしました(fzf
の真似をしました)
例)
--ssh --fuzzy --make
を毎回オンにしてfzf
を使いたい場合~/.bashrc
に
CDX_DEFAULT_OPTS="--ssh --fuzzy --make" CDX_FUZZY_COMMAND="fzf"
と書けばいいです
-hと-bオプション
この二つのオプションはそれぞれ履歴とブックマークからのcd
をするコマンドですが、インストールを手順通りにやっていればタブでの補完でもファジーサーチが起動するようになっています
タブ補完ではもう一つ。パスの最後が/**
となっているときもタブで。それまでのパス以下をリストアップしファジーサーチが起動します
cdx -h <TAB> #履歴オープン cdx -b <TAB> #ブックマークオープン cdx /home/hoge/huga/** <TAB> #~/hoge/huga以下に対してしてファジーサーチが起動
–sshオプション
–sshオプションを有効にしたときはcdx
でssh
ログインができるようになります
例えば~/.ssh/config
に
Host abc HostName xxx.xxx.xxx.xxx User user Port xx
だとすると
cdx --ssh abc
とすると~/.ssh/config
の情報を使ってssh
ログインを試みます。もし同じ名前のディレクトリがある場合は 移動の方を優先 します。
このオプションの実装はシェルスクリプト内で~/.ssh/config
内に登録されたHost名かどうかを確かめた後
ssh [HostName]
を実行しているのです。~/.ssh/config
の設定をよくする人は使い勝手は同じに感じることができると思います
実はこのオプションの導入をするかどうかは考えました
「ディレクトリを移動するcdx
コマンド」を考えたときssh
ログインまでカバーするのはやりすぎだと思いました。
しかし「移動を簡単にするcdx
コマンド」として考えたときssh
ログインもまた移動なのかなと思いました
とか何とか言ってますが一つにまとめられて個人的には満足しています
終わりに
enhancd
はすごいです。next generation を謳っているだけはあります。cdx
はenhancd
ほど複雑な実装をしていません。コマンドの本体もcdx.sh
だけで完結しています。
cdx
ではcd
した後にどこに移動したかが目でよくわかるような表示をしています。これは結構見やすくカッコいいと思っています。ただしターミナルの配色によっては見えづらいかもしれません・・・(cdx_echo.sh
をいじってください)
カッコいい見た目とかブックマークとかsshしたいという人はぜひ使ってもらえたらと思います