cd打つの面倒くさくないですか?
例えば今開発中のプロジェクトフォルダだとか、お気に入りの画像を置いてあるフォルダのように頻繁に移動したいディレクトリがあるとします。
このとき
$ cd ~/fav/img
のように打つの面倒くさくないですか?
僕は怠惰なので
$ cd i
くらいのお気楽さで移動したいです。
作った
このニーズを解決してくれるツールはもちろん探したんですが、あんまり使い方がシンプルじゃなかったので自分で作りました。まあ何ヶ月も前の話ですが、今思い出したので紹介します。Go製です。
りどみにあるように
$ go install github.com/midry3/ax/cmd/ax-lookup@latest
でインストール。
~/.bashrcに以下を追記。
eval "$(ax-lookup)"
お馴染みの以下を実行。
$ source ~/.bashrc
3.~/.axconfを編集、json形式です。
例えば
{
"i": "~/fav/img"
}
としておけば、ターミナルで
$ ax i
と打つだけで~/fav/imgに移動できます。
ただし、基本はcdなので、 ~/.axconfに登録したエイリアス よりも カレントディレクトリに存在するディレクトリ を優先するので、例えばカレントディレクトリにiというフォルダがあるとそっちに移動してしまいます。そういうときは
$ ax @i
とすれば名前衝突を回避できます。
詰まった点
これは僕の勘違いだったのですが、プログラム内で普通にcd叩いてもターミナルの方まで影響を与えられないです。
package main
import (
"fmt"
"os/exec"
)
func main() {
_, err := exec.Command("cd", "~/fav/img")
if err != nil {
fmt.Println(err)
return
}
}
ですので少し迂回手段を取りました。bashには関数機能があります。
f() {
echo $1
}
この関数はコマンドのように呼ぶことができます。
$ f hello
# hello
これを利用して、axという関数を定義し、コマンドのように使えるようにしました。お陰様で~/.bashrcに依存することになってしまいましたが……。
QOL上がりました
自作ツールの中でなんやかんや一番使ってます。我ながら👍️