まえがき
FishシェルがメジャーバージョンアップしたのでCHANGELOGを意訳しました。
fish 3.0b1(ベータ版)〜3.0.2までになります。
正確なところは元の文章を参照してください。
2.9系からの主な変更点は3.0ベータ1に記述されています。
それ以降の変更点は差分として上に追記されていく形式のようです(Changelogだからね)。
fish 3.0.2 (released February 19, 2019)
このリリースは3.0.1で判明している問題を修正するためのものです。
修正および変更点
- 本当のワーキングディレクトリが取得できない場合、PWD環境変数を無視します。エディタやIDEのターミナルにおける奇妙な現象が改善されます。 (#5647).
2.7.1以前のバージョンからアップグレードする場合は3.0b1, 3.0.0, 3.0.1の変更点を確認してください。
fish 3.0.1 (released February 11, 2019)
このリリースは3.0.0で判明した大きな問題を修正するためのものです。
修正および変更点
-
exec
はフォアグラウンドジョブが動作していても実行されるようになりました (#5449)(注:関数内でexecしたときに関数をジョブと判定してexecの実行がキャンセルされていたようだ) - whileループはループ内で最後に実行されたコマンドの終了ステータスを返すようになりました(ループが空の場合は0)。これはPOSIXに準拠します。 (#4982)
- 非対話スクリプトで
read --silent
は端末への出力を行わなくなりました (#5519) - MacでPATH一覧を取得する先として
/etc/paths
と/etc/paths.d
どちらも参照するようになりました。MANPATH
が/etc/manpaths
と/etc/manpaths.d
見るのと同様です (#5481) - Cygwin/MSYS2 で実行できるようになりました (#5426)
- ページャーにフォーカスがないときの検索フィールドで
pager-toggle-search
バインディング (デフォルトはCtrl-S) が有効になりました。 - コマンドがないときのエラー出力は、引数を含めたすべてではなく、コマンドに対して1度だけ出力されるようになりました (#5588)
- Gitコマンドの補完が修正・改善されました。古いGitでもパスの補完が正しく行われます。曖昧一致が修正されました。(
:/
で始まる)絶対パスでの補完を不必要に行わないようにしました(#5578, #5574, #5476)。シェルのエイリアスを使用しないようにしました。冒険的なユーザーがラッパーコマンドをセットアップできるようになりました (set -g __fish_git_alias_$command $whatitwraps
を使用) (#5412) - シェルのよく使われる関数のパフォーマンス向上 (#5447) と
kill
コマンドの補完のパフォーマンス向上 (#5541) - シンボリックリンクのディレクトリ上で起動されたときの動作が修正されました (#5525)
- 標準の
fish_title
関数は余分なスペースを含まなくなりました (#5517) -
nim
プロンプトがブラウザ上の設定画面で選択されたとき正常に動作するようになりました (#5490) -
string
関数のヘルプが標準エラーに出力されるようになりました (#5495) - viバインディングでCPUを食い尽くすことがなくなりました(#5528)
- 異常終了する問題をいくつか修正しました (#5550, #5548, #5479, #5453)
- ドキュメントを改善しました。
既知の問題
リリース時には判明していなかった重要な問題があります。
- fishは Windows Services for Linux Windows 10 version 1809/17763以前では実行できません。また警告も表示されません (#5619)
2.7.1以前のバージョンからアップグレードする場合は3.0b1, 3.0.0の変更点を確認してください。
fish 3.0.0 (released December 28, 2018)
3.0b1からの差分は以下の通り。
リリース時に判明している重要な課題は以下です。
fish 3.0b1 (released December 11, 2018)
fish3はメジャーリリースであり機能改善とともに破壊的変更を含みます。既存のスクリプトのほとんどはそのまま動作するはずですが以下の変更点を確認してください。
主な非互換の変更
- プロセスとジョブ展開はほぼ取り除かれました。
%
はカレントシェルのPIDを示す%self
以外展開されません。ジョブ制御コマンドたち(disown
,wait
,bg
,fg
,kill
)は%
で始まるジョブ指定子を展開します。 - 配列の複数の要素を一度にセットする
set x[1] x[2] a b
が正しい構文ではなくなりました。 - 単体のリテラル
{}
は{}
という文字列自身に展開されます。これによってfind -exec
の利用が簡単になります。 - 配列の0番目へのアクセスは許可されなくなりました。(fishのインデックスは1スタートです)
- ブレース展開中の連続したカンマの扱いはより自然なものになりました。例えば
{,,,}
は1個の空文字ではなく4個の空文字へと展開されます。 -
for
ループを制御するための変数はfor
ブロックのローカル変数ではなくなりました。 -
if
とwhile
のブロックの中から外側の変数を変更できるようになりました。 - ローカルのエクスポートされた変数を関数内から参照できるようになりました。
- 組み込みの
math
コマンドは論理演算子をサポートしなくなりました。test
コマンドを使用してください。 - 範囲展開に正の整数と負の整数を適用したとき(
$foo[5..-1]
ないし$foo[-1..5]
)の挙動がいい感じになりました。リストの項目数が与えられた数より少ない場合にも方向を変更せずに存在するインデックスへ調節されます(訳注:わかるようなわからんような…)- 原文:Range expansion will now behave sensibly when given a single positive and negative index (
$foo[5..-1]
or$foo[-1..5]
), clamping to the last valid index without changing direction if the list has fewer elements than expected.
- 原文:Range expansion will now behave sensibly when given a single positive and negative index (
-
read
の-s
は--silent
の短縮形の意味になりました(bash準拠)。--shell
の短縮形は-S
になります。 - 他のシェルにあわせて
cd
はsymlinkを解決しなくなりました。 -
source
にターミナルから入力したい場合は-
が必要になりました。 -
end
コマンドに引数を与えるとエラーになるようになりました。 -
argparse
,read
,set
,status
,test
,[
は予約語になり関数名として許容されなくなりました。これにより意図せず既存のコマンドを上書きすることを予防します。 -
fish_user_abbreviations
変数を使用しなくなりました。略語は自動的に新しい保存形式へ変換されます -
FISH_READ_BYTE_LIMIT
変数はfish_byte_limit
に変更されました。 - 環境変数は起動時に配列に展開されなくなりました。ただし変数名がPATHで終わる場合はコロン
:
で分割されます。 -
history
コマンドの--with-time
オプションは削除されました。これは2.7.0から--show-time
に置き換えられています。(#4403) - 内部変数
__fish_datadir
と__fish_sysconfdir
は、__fish_data_dir
と__fish_sysconf_dir
に置き換えられます。
非推奨になった機能
fish 3のリリースに際して多数の機能が将来的に削除されることになりました。ユーザーには代替の機能を利用することをおすすめします。少数の機能はフィーチャーフラグによってデフォルトでは無効になっています。
フューチャーフラグ機構は破壊的変更と機能削除のテスト用に追加されました。フィーチャーフラグは起動プションfish --features ...
またはユニバーサル変数fish_features
によって設定できます。
-
read
コマンド用のIFS
変数は廃止されます。read --delimiter
を使用してください。 -
function --on-process-exit
は廃止されます。fish_exit
を使用してください(function --on-event fish_exit
のように使います) -
$_
は廃止されます。status current-command
に置き換えてください。 - 標準エラーへリダイレクトするための
^
は廃止されます。2>
を使用してください。フィーチャーフラグstderr-nocaret
によって切り替えることができます。 - グロブの
?
(ワイルドカード)は廃止されます。フィーチャーフラグqmark-noglob
によって切り替えることができます。
特筆すべき修正と改善
シンタックスの変更と新しいコマンド
- POSIX互換シェルから移行しやすくするため、
&&
(and
と同等)、||
(or
と同等)、!
(not
と同等) が使えるようになりました (#4620)。 - 変数をコマンドとして使用できるようになりました(訳注:たとえば
set filelist ls;$filelist
とするとls
が実行できるようになる) -
fish --private
でプライベートモードになります。プラーベートモードではコマンド履歴ファイルにアクセスしませんし、あらゆるコマンドは他のセッションに影響しません(訳注:たぶんユニバーサル変数とかのことを言っている)。スクリプト中ではセッション変数$fish_private_mode
によってプライベートモードかどうか判定できます。 - コマンドをバックグラウンドで実行して終了を待つ
wait
コマンドが追加されました。 -
math
コマンドはbc
コマンドのラッパーではなく完全な組み込みコマンドになりました。数値はデフォルトで浮動小数点数として計算されます。--scale
オプションによって制御可能です。 -
$PATH
に存在しないディレクトリを指定しても警告が出なくなりました。 -
while
の中身が実行されなかった場合に$status
に非ゼロ値をセットするようになりました。 - コマンド置換で扱える出力の上限がデフォルトで10MBになりました。
fish_read_limit
変数によって変更できます。メモとして、この変数をOSの引数の限界以上に設定した場合、外部コマンドに渡してもうまく実行できません。 - マシンのホスト名が変数
$hostname
に設定されます。hostname
に依存しません。 - config.fish中から直接
bind
を呼び出せるようになりました。fish_user_key_bindings
関数を実行する必要はありません。が、現在のところ呼び出すことはできます。 -
%self
と%last
は$fish_pid
と$last_pid
に置き換えられました。
コマンドの新しいフィーチャー
-
alias
に関数として保存するための--save
オプションが追加されました。 -
bind
に現在のターミナルで指定したキーがバインドできない場合のエラーを出力しない--silent
オプションが追加されました。 -
complete
に自動的に生成された引数リストがアルファベット順ではなく同じ順序を保つようにするための--keep-order
オプションが追加されました。 - バックグラウンドジョブが実行中の場合
exec
が警告を出すようになりました。 -
funced
に編集が成功した場合自動的に保存する--saved
オプションが追加されました。 -
function
に登録済みのイベントハンドラを表示する--handlers
オプションが追加されました。 -
history search
はワイルドカード検索にグロブパターンを使用するようになりました。また--reverse
オプションでソート順を切り替え(古い/新しい順)ることができます。 -
jobs
コマンドに黙って動作する--quiet
オプションが追加されました。 -
read
コマンドに入力を配列に分割する--dewlimiter
オプションが追加されました。 -
read
コマンドは引数がなかったとき入力を標準出力に直接出力するようになりました。 -
read
コマンドに入力を消費せずに行を読み込む--line
オプションが追加されました。(訳注:どういうこと?) -
set
に新しく--append
と--prepend
オプションが追加されました (#1326)。 -
set
コマンドに変数の詳細を表示する--show
オプションが追加されました。 -
string match
に空のパターンと--entire
オプションを指定したときグロブモードでは全体にマッチするようになりました。 -
string split
に--no-empty
オプションが追加されました。処理結果から空文字が除去されます。 -
string
コマンドにヌル区切り出力するサブコマンドとしてsplit0
とjoin0
が追加されました。 -
string
コマンドはテキスト中にヌル文字があっても処理を停止しなくなりました。 -
string escape
コマンドに--style regex
オプションが追加されました。正規表現用にエスケープできます。 -
test
コマンドで浮動小数点数が使えるようになりました。
インタラクティブな改善
- 行末にパイプがあるとき次の行にジョブを継続するようになりました。(訳注:入力の話?パイプで渡せるの?)
- A pipe at the end of a line now allows the job to continue on the next line (#1285).
- OSXのTerminal.appとiTermで斜体とdim(訳注:書体?色?)をサポートするようになりました。
-
cd
のタブ補完で深すぎるパスへ下降しないようになりました。 - ページャーの操作が改善されました。特に一番上から上方向に移動したとき一番下にジャンプするようになりました。左右キーを押したときも下端・上端をループするようになりました。
- タブ補完が略語(abbrコマンド)も利用するようになりました (#3233)
- 補完ページャが表示されているとき通常の文字を入力しても検索フィールドを表示しなくなりました。
- 入力バインディング
pager-toggle-search
が追加されました。補完時のページャ表示を切り替えます。デフォルトではCtrl-Sに割り当てられています。 - ページャーの検索が完全にファジー検索を行うようになりました。
- 補完結果が長いときページャーで表示するようになりました(訳注:超意訳。本当か?)
- The pager will now show the full command instead of just its last line if the number of completions is large (#4702).
- ファイル名中のチルダが補完された場合でも正しくエスケープされるようになりました。
- ラッピング補完(
complete --wraps
またはfunction --wraps
による)が引数を許容するようになりました(たとえばgitのサブコマンドが使えるようになります)。alias
コマンドも同じように変更されました。 - パス補完が「展開」をサポートするようになりました。たとえば
python ~/<TAB>
のようなことが展開も利用するようになります。(訳注:変数展開とかブレース展開を考慮してパス補完すると言っている気がする) - すでに入力済みのオプション以外を自動サジェストするようになりました。
- コマンド置換中のプロセスのクラッシュを通知するようになりました。
- ベルのあとスクリーンをリセットしなくなりました。画面が崩れにくくなります。
- vi-modeで
;
と,
が使えるようになりました。{forward,backward}-jump-tillと repeat-jump{,-reverse}を呼び出します。 - vi-modeで
*y
が使えるようになりました。 - 標準でneovimでTrueカラーが有効になりました。
- ターミナルサイズを取得するための変数(
$COLUMNS
/$LINES
)はfish_prompt
が実行される前に更新されるようになりました。 - ターミナルがリサイズされたとき複数行プロンプトが折り返されなくなりました。
- クリップボードの実装に
xclip
が追加されました。 - コマンドラインが空の場合Alt-Pを押すと最後のコマンドをページネイトします。(訳注:ヒストリのこと?ターミナル出力?)
- コマンドが実行されなかったとき(訳注:typoとか?)変数
$cmd_duration
はリセットされなくなりました。 - 1文字の単語を削除した時に次の単語が一緒に削除されなくなりました。(#4747)
- 履歴検索(Alt-Up)では重複したエントリが削除されるようになりました。(#4795)
-
fish_escape_delay_ms
によるタイムアウトはエスケープキーを他のコントロール文字と同じように操作の一環として受け入れるようになり、エスケープキー操作を削除できます。(訳注: 動作を全く理解しないで訳してます)- 原文: The
fish_escape_delay_ms
timeout, allowing the use of the escape key both on its own and as part of a control sequence, was applied to all control characters; this has been reduced to just the escape key.
- 原文: The
- 関数を補完したとき正しく説明を表示するようになりました(#5206)
- 以下のコマンドの補完が追加されました
-
ansible
とansible-galaxy
、ansible-playbook
、ansible-vault
(#4697) -
bb-power
(#4800) -
bd
(#4472) bower
-
clang
andclang++
(#4174) -
conda
(#4837) -
configure
(autoconfで生成されたもののみ) curl
-
doas
(#5196) -
ebuild
(#4911) -
emaint
(#4758) -
eopkg
(#4600) -
exercism
(#4495) hjson
-
hugo
(#4529) -
j
(autojumpのもの #4344) -
jbake
(#4814) -
jhipster
(#4472) kitty
kldload
kldunload
-
makensis
(#5242) meson
-
mkdocs
(#4906) -
ngrok
(#4642) - OpenBSD の
pkg_add
、pkg_delete
、pkg_info
、pfctl
、rcctl
、signify
、vmctl
(#4584) openocd
optipng
-
opkg
(#5168) -
pandoc
(#2937) -
port
(#4737) -
powerpill
(#4800) -
pstack
(#5135) -
serve
(#5026) ttx
unzip
-
virsh
(#5113) -
xclip
(#5126) xsv
-
zfs
とzpool
(#4608)
-
- 補完の改善多数(特に
darcs
,git
,hg
,sudo
) -
yarn
とnpm
の補完を完全に使用するためにNPMモジュールall-the-package-names
が必要になりました。 -
bower
、yarn
の補完を完全に使用するためにjq
が必要になりました。 - フランス語の翻訳を改善しました。
その他修正と改善
-
abbr
、変数の設定、関数の実行、グロブ、string
の標準入力読み込み、ヒストリのスライスアクセス、のパフォーマンスが改善されました。 - Fish組み込みのwcwidth関数が新しいUnicodeに合わせて更新されました。いくつかの文字の幅は変数
fish_ambiguous_width
とfish_emoji_width
によって変更できます。かわりとしてビルド時のINTERNAL_WCWIDTH
オプションが追加されました。これはシステムのwcwidthを上書きします。 -
functions
の--description
の短縮形として-d
が追加されました。 - OSXのbashの
path_helper
のように/etc/paths
をパースするようになりました。 -
for
で読み込み専用の変数を使用した時にエラーが起こるようになりました。 - ユニバーサル変数のファイル名にホスト名とMACアドレスを含まないようになりました。固定のパス
.config/fish/fish_variables
になります。 - グローバル/ユニバーサルスコープのエクスポート済変数はローカル変数のエクスポート状態の影響を受けません(#2611)
- (訳注:実際どうなるんでしょうか)
- ターミナルとジョブ管理からバグを取り除くために大幅な変更を行いました(#3805, #3952, #4178, #4235, #4238, #4540, #4929, #5210)
- man pageからの補完生成を改善しました(#2937, #4313)
-
suspend --force
が正しく動作するようになりました(#4672) - スクリプト実行中にCtrl-Cが押された場合、確実にfishを終了するようになりました(#5253)
頒布者と開発者向け情報
- fishはCMakeでビルドされるようになりました。最低でもCMake 3.2が必要になります。autotoolsによるMakefileとXcodeプロジェクトはこのリリースに含まれますが、近い将来削除されます。すべての頒布者と開発者はただちにCMakeでのビルドに移行してください。
- ビルドスクリプトからBash依存が削減され多くの環境でBashが不要になりました。
- fishの実行にhostnameコマンドが不要になりました。