📑

fishの便利機能 移動・略称

に公開

普段使ってるツールの使ってない機能を使ってみる Advent Calendar 2025です。

惰性でfishを使っていたのですが、これを機会にドキュメント読んで、いろいろ便利な機能あるじゃんとなりました。

(fish 4.0.1で確認)

ディレクトリ移動(cdh/prevd/nextd)

定番のcd、bash等他のシェルでもよくあるpushd/popd以外にも、

  • 履歴を見て移動できるcdh
  • pushd/popdと似たprevd/nextd

でちょっと便利に移動できます。

cdhの動きを見てみましょう。今zennというディレクトリにいて、そこにhogeという下のディレクトリがあるとします。

> tree hoge
hoge
└── buzz
    ├── aaa
    └── bbb

4 directories, 0 files

hoge/buzz/aaaに移動した後、cdhを実行すると元いたディレクトリが履歴として選べます。

> cd hoge/buzz/aaa
> cdh
 a  1)  ~/zenn

hoge/buzz/bbbに移動すると、一つ前にいたaaaとその前にいたzennが表示されます。

>  cd ../bbb
> cdh
 b  2)  ~/zenn
 a  1)  ~/zenn/hoge/buzz/aaa

番号、もしくは数字を入力する、昔いた場所に移動できます。

prevd/nextdも履歴をたどるという点ではcdhと同じなのですが、

  • ショートカットキーで移動できる(alt左矢印、右矢印)
  • (直前直後で良いなら)入力がちょっと少ない

というcdhとは別の便利さがありそうです。

Abbreviation

名前の通り、コマンドの略を定義する機能です。

# gcoでgit checkoutになるようにすると
> abbr -a gco git checkout
# gcoと入力すると
> gco
# コマンドライン表示や履歴上はgit checkoutとして展開
> git checkout
M       articles/advent-calendar-2025-fish.md
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

aliasと似た目的ですが、

  • 履歴や表示は*展開後*の名前になるので、他の人に共有する時や記録に残す時、略称の説明が必要
  • 単純な文字列置換だけではなく、正規表現や関数も使えるので、「.」の数に応じてcdするといった芸当も可能(fishドキュメントにある下の例)

といったアドバンテージがあります。

(逆にfishでalias使うメリットあるのかしら)

# fishドキュメントにある例
> function multicd
    echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../)
end

# ドット(だけ)が続く文字列の場合、multicd関数を呼び出すabbreviationを定義
> abbr --add dotdot --regex '^\.\.+$' --function multicd

# ドットをたくさん入力すると
> ....
# 展開!
> cd ../../../ 

Discussion