📑
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