TL;DR
- これまでuniversal変数でabbrを管理していたのが変更になった
- universal変数によるabbrもサポートしている
- 3.6.0にアップデートしたからといって突然これまでのabbrが使えなくなるわけではない
- これからは config.fish にabbrを記述することが推奨された
- これまでのようにコマンドラインから
> abbr -a hoge 'echo hoge'
のように実行すると保存されない(shellを再起動するとそのabbrが消える)
本文
みなさんはfishのabbr1使っていますでしょうか。aliasと違って展開されるので、後で検索しやすくて私はよく使っています。
2023年1月7日のアップデートでfish 3.6.0
になってからabbrの拡張性は増え、以下の機能が追加されました
- コマンドの展開だけでなく、オプションなどのあらゆるところで展開できるようになった
- 展開のワード(Matching tokens)がregexに対応した
- 展開の際に関数が利用できるようになった
- 展開後のカーソルの位置を設定できるようになった
これによりabbrはより使いやすくなったようです。これに関しての説明は省かせてもらいます。詳細はリリースノートや詳細ページ(記事投稿時点)を見てください
universal変数の不使用
機能が増えたのは喜ばしいのですが、これによりabbr自体の仕様が変わりました。
これまでuniversal変数でabbrを管理していた2ものが別管理になりました。リリースノートの「Deprecations and removed features」にも書かれてあります
- Abbreviations are no longer stored in universal variables. Existing universal abbreviations are still imported, but new abbreviations should be added to config.fish.
(Abbreviationはユニバーサル変数に保存されなくなりました。現存しているユニバーサルによるabbreviationは使用できますが、新しいabbreviationはconfig.fish
に追加してください。)
また、2023/1/22のコミット (まだバージョンには実装されていない) により、この旨がabbrの詳細にも明記されるようです。
※追記
abbrの説明ページに下記文章が反映されていることを確認しました。help abbr
としても確認可能です。
Previous versions of this allowed saving abbreviations in universal variables.
That's no longer possible. Existing variables will still be imported andabbr --erase
will also erase the variables.
We recommend adding abbreviations toconfig.fish
by just adding theabbr --add
command.
When you runabbr
, you will see output like this
> abbr
abbr -a -- foo bar # imported from a universal variable, seehelp abbr
In that case you should take the part before the
#
comment and save it in config.fish,
then you can runabbr --erase
to remove the universal variable::
> abbr >> ~/.config/fish/config.fish
> abbr --erase (abbr --list)
上記の通り、
> abbr >> ~/.config/fish/config.fish
> abbr --erase (abbr --list)
を実行し、abbrをconfig.fish
に追記した後universal変数からabbr関連の変数を削除しましょう。
また、新規のabbrはconfig.fish
に書きましょう。