訳者前書き
1年ぶりのリリースですね!
正確なところは原文とイシューを見てください。
fish 3.1.0 (released February 12, 2020)
fish 3.1b1から正式リリースまでの差分:
- ブレース展開されない場合でもブレース直後のスペースが削除される不具合を修正 (#6564)
- Cygwin環境で存在したいくつかのコンパイル、テストの問題を修正 (#6549) IllumosなどSolaris系OSでも修正 (#6553, #6554, #6555, #6556, #6558);
- macOS パッケージのビルドプロセスを修正;
- Unicodeが許容されないロケールでエラーメッセージが表示されていた不具合を修正 (#6584) ;
- コマンド補完及びドキュメントの軽微な修正.
バージョン 3.0.0 以降からアップグレードするときは、3.1b1の変更履歴を確認してください(それ以前のものも必要に応じて確認してください)
fish 3.1b1 (released January 26, 2020)
主な改善と修正点
- 新しい
$pipestatus
変数にはリストとしてパイプラインのコマンドの終了ステータスを保持します (#5632). - 最後の関数のパイプラインをバッファしないようになりました。これによりパイプがブロックされたり停止されたりするケースの多くが改善されます (#1396).
- ビルトインコマンドのエラーメッセージを見直しました。コマンドの使用例の表示削除、スタックトレースの可読性向上 (#3404, #5434), testコマンド([コマンド)のスタックトレース変更を含みます (#5771).
- fishのデバッグ引数が大幅に改善されました。
--debug-level
オプションは削除され、新しく--debug
オプションに置き換わりました. このオプションは複数のカテゴリを受け付けます。fish --print-debug-categories
コマンドで一覧を表示できます (#5879). 新しい--debug-output
オプションはデバッグ出力をリダイレクトすることが可能です. -
string
に新しくcollect
サブコマンドが追加されました。コマンド置換に使用できます, 改行コードで分割された文字列を単一の出力にできます (他のシェルの"$(cmd)"
と同様) (#159). - fishのマニュアル、チュートリアル、FAQがそれぞれ
man
書式のfish-doc
,fish-tutorial
andfish-faq
として提供されます (#5521). - 他のシェルのように, CDPATHに "." やカレントディレクトリが含まれなくても、
cd
コマンドは常にカレントディレクトリを確認するようになりました (#4484). -
CDPATH
に..
で始まる文字列や (#6220)./
を含む文字列が (#5887) 登録されていても正しく扱えるようになりました. -
fish_trace
変数でトレース実行を設定できます (#3427). 他のシェルでいうset -x
のようなものです. - 一時ディレクトリとして
/tmp
ではなくシステムで決定されたディレクトリを使用します (#3845). - fishのブラウザ設定ツール (
fish_config
) 動作の理解とデバッグのため実行されたコマンドを出力します (#5584). - パース時 (#5866), 多数のコマンドを実行するとき (#5905), Bashのコマンド履歴のインポート時 (#6295), 変数の補完が
$history
と一致する場合 (#6288) のパフォーマンスが大幅に改善されました.
文法の変更及び新しいコマンド
-
time
組み込み関数が追加されました, fishの関数と組み込みコマンドの時間計測が改善されます (#117). - ブレース展開はその中に "," が含まれるか変数展開の場合のみ動作します, これにより
git reset HEAD@{0}
をエスケープせず記述できます (#5869). - 新しいリダイレクト記法として
&>
と&|
が追加されます。標準エラー出力と標準出力を一緒にパイプ、リダイレクトするときに使います (#6192). -
switch
コマンドは、空の変数のように、何にも展開されない引数を許容します (#5677). - 一時的に環境変数を変更してコマンドを実行する
VAR=val cmd
文法が使えるようになりました (#6287). -
and
はコマンドとして認められなくなりました。and and and
のような無意味な記述が文法エラーになります (#6089). -
math
の指数演算子, '^
', は左結合でしたがより自然な右結合として振る舞います (#6280).math '3^0.5^2'
は '(3^0.5)^2' として計算されていましたが, '3^(0.5^2)' として計算されるようになります. - fish 3.0 ではコマンド置換中の
for
ループで使用される変数が変数スコープより外に漏れていました; これは想定していないふるまいの変更だったので修正されました (#6480).
スクリプト向けの改善
-
string split0
は文字列を分割できたとき0を返します (#5701). -
function
コマンドとの一貫性を保つため,builtin -q
とcommand -q
でビルトインコマンドとコマンドが存在するかどうか確認できるようになりました (#5631). -
math
が利用可能な最大の桁数を使える--scale=max
を受け入れるようになりました (#5579). -
builtin $var
は組み込み変数でも動作するようになりました (#5639). -
cd
はハイフンで始まるディレクトリ名のため--
を使用できるようになりました (#6071). -
complete --do-complete
はファジー検索するようになりました (#5467). -
complete --do-complete
はコマンド補完の中で使えるようになりました。再帰呼び出しは制限されます (#3474). -
count
は標準入力の行数もカウントするようになりました (#5744). -
eval
は他のシェルのように、引数なしで実行されたとき終了ステータス0を返すようになりました (#5692). -
printf
は数字を完全に変換できなかったとき、エラーメッセージとともにどのように変換されたかを表示します (#5532). -
complete -C foo
がcomplete -Cfoo
と同様に動作します. -
complete
にファイル補完を再度有効化する--force-files
オプションが追加されました. これによりsudo -E
とpacman -Qo
が正しく補完されるようになります (#5646). -
argparse
はエラーの際(argparse
という文字列ではなく)--name
オプションをつけなくても現在の関数名を表示するようになりました (#5835). -
argparse
で多段でパースできるようにするため、新しい--ignore-unknown
オプションで不明なオプションをそのままにするようになりました (#5367). -
argparse
は短縮形だけのオプションの値のバリデーションを正しく扱えるようになりました (#5864). -
read -S
(--shell
オプションの短縮形) が使用できるようになりました(ドキュメントには記述されていました) (#5660). -
read
は--array
のように動作するすべての引数を一つの変数にリストとして読み込むより良い名前のオプションとして--list
を使えるようになりました (#5846). -
read
の新しいオプションとして--tokenize
が追加されました。シェルの軸解析ルールにより文字列のクォートやエスケープ諸々を考慮して文字列を分割し変数に格納します (#3823). -
read
は非推奨となった$ISF
変数に対してもっと正しく振る舞うようになります。 他のシェル同様、入力を変数のリストに展開するとき連続した区切り文字が除去されるようになります (#6406). -
fish_indent
はセミコロンをよりうまく扱えるようになりました,; and
や; or
でセミコロンを残すのではなく改行するようになりました (#5859). -
fish_indent --write
は引数として複数のファイルを受け取りインデントできるようになりました. - 引数の最大長が 100MiB に引き上げられました (#5267).
-
math
はホワイトスペースでかこまれたx
を掛け算として扱うようになりました (#5906). -
math
カッコ内の不正なシンタックスを正しくエラーとし (#6063) 、利用できない論理演算子は警告を出力するようになりました (#6096) . -
functions --erase
をオートロード関数がロードされるまでに実行すると、オートロード関数がロードされるのを抑制するようになりました (#5951). -
jobs --last
はジョブが見つかったときに成功を表す終了ステータスとして 0 を返します (#6104). -
commandline -p
とcommandline -j
は&&
と||
の分割結果として;
と&
を返します (#6214). - 出力が空文字のとき
string split
が空文字を捨ててしまうバグが修正されました (#5987). -
eval
はローカルの変数スコープを作成しませんが、ローカル変数を変更することはできます (#4443).source
は引き続きローカルの変数スコープを作成します. -
abbr
に省略形の有無をチェックする--query
オプションが追加されました. - ローカル変数の
fish_complete_path
とfish_function_path
は無視されるようになました; グローバル変数のみが利用されるようになります. - シンタックスエラー時に正しいマーカーが報告されるようになりました (#5812).
- 空のユニバーサル変数はエクスポートされないようになりました (#5992).
- エクスポートされたユニバーサル変数はグローバルスコープにコピーされなくなり, シャドーイングが発生しなくなりました. これにより、容易にすべてのfishセッションの変数を変更でき、複数の要素のリストである場合に、破損を避けられます (#5258).
-
for
で不正な変数名が使用できるバグを修正しました (#5800). - ローカル変数が関数にエクスポートされないバグが修正されました (#6153).
- 何もしないコマンド (
:
) は、直前の終了ステータスを返すのではなく、常に成功を返すようになりました (#6022). -
functions FUNCTION
の出力は、コメントや空白行を含む関数の宣言と一致し (#5285) (#5285),--wraps
フラグを正しく含むようになりました (#1625). - 新しく
type
に関数についての出力を短縮する--short
オプションが追加されました (#6403). -
type --path
は引数が関数である場合に、そのファイルが存在したら、関数が含まれるファイル名を出力します. -
type --force-path
はドキュメント通りに引数に指定した対象が見つからない場合何も出力しません (#6411). -
$hostname
変数は32文字に切り詰められなくなりました (#5758). - 関数のバックトレースの行数が正しく計算されるようになりました (#6350).
- 新しく追加された
fish_cancel
イベントはコマンドラインがキャンセルされたことを通知します。ターミナルの実装に使用できます (#5973).
インタラクティブ環境の改善
- 新しいBase16カラースキームはブラウザベースで設定可能です(#6504).
- fish はBashの実装にあわせて(#5637)macOSのログインでのみ
/etc/paths
を参照し, 子シェルのPATHの順序入れ替えを無視します (#5456). Bash実装のように空行を無視します (#5809). -
LOCPATH
変数が変更されたらロケールファイルを再読み込みします (#5815). -
read
は入力内容を履歴に保存しなくなり、パスワード入力のような、終了してはいけない操作に利用しやすくなりました (#5904). -
dirh
はスタックを正しい順番で出力するようになりました (#5477), そしてドキュメント通りユニバーサル変数を利用するようになりました (#5797). -
funced
と edit-commandline-in-buffer バインディングは fish 3.0 で$EDITOR
変数にスペースが入っていると正しく動かなくなっていましたが、修正されました (#5625). - 組み込み関数は自動的にページャーに出力するようになりました (#6227).
-
set_color
は--print-colors
の色をターミナルに合わせて出力するようになりました. - fish は最後のパスだけでなく、有効なすべてのパスに下線を引きます (#5872).
- 閉じていないクォートのシンタックスハイライトは, 引数全体ではなくそのクォートだけにエラー表示されます.
- シンタックスハイライティングはコマンドを表す変数と (#5658) ファイル奇術師を閉じるリダイレクトに対して (#6092) 正しく動作するようになりました.
-
help
は Windows Subsytem for Linux (#5759, #6338) で正しく動作するようになりました. - シェルをクラッシュさせる
disown
のバグは修正されました (#5720). - fish は一般的にバックアップとして作成される
~
で終了するファイルを補完候補に表示しなくなりました (#985). - ページャーでのエスケープが正しく動作するようになりました (#5818).
-
fg
を呼び出すキーバインディングはターミナルを破壊しなくなりました (#2114). - 括弧 (#5831) と
$
(#6060) を含むファイル名は適切にエスケープされるようになりました. -
complete
とfunctions
の出力はインタラクティブなターミナルでは色がつくようになりました. - ウェブベースの設定画面でシングルクォートを含むエイリアスを正しく扱えるようになり (#6120), Termux (#6248) と OpenBSD (#6522) で正しく起動するようになりました.
-
function
は--argument-names
のパラメータを有効な変数名として正しく検証し (#6147) "--argument-names foo --description bar
" のように--argument-names
に続くパラメータを正しく解析します (#6186). - bash から新たにインポートされた履歴には
&&
、||
を使用したコマンドラインが含まれます. - manページからの補完の自動生成はジョブとプロセスのリストで管理されるようになり, fishの終了時に警告されないようになりました (#6269).
- プライベートモードでは、プライベート セッションを開始する前に
$fish_greeting
を空にすると、保存されていない履歴に関する警告が表示されなくなります (#6299). - インタラクティブエディタでは、閉じられていない角括弧内の改行 (Enter) は、コマンドを実行してエラーを生成するのではなく、改行を挿入します。(#6316).
- Ctrl-C は常にプロンプトを再描画します (#6394).
- 別のプログラム (Pythonなど) から対話的に実行すると、他のシェルと同様に、fish は新しいプロセスグループを正しく開始します (#5909).
- ジョブID (例えばバックグラウンドジョブ) はより論理的に割り当てられます (#6053).
- 空のコマンドが実行された場合に履歴が切り捨てられて表示されるバグが修正されました (#6032).
新しいキーバインド、またはキーバインドの改善
- 貼り付けされたコマンドが履歴から省略されるのを防ぐため、貼り付け時に先頭のスペースを除去します (#4327).
- Shift-Left と Shift-Right はデフォルトで単語単位での移動に割り当てられます (単語はスペース区切り) (#1505).
- エスケープのウェイトは30msに短縮されました (エスケープキーと、Altキーの組み合わせを区別するため)。以前のデフォルトは 300ms、Viモードでは 100ms でした (#3904).
-
forward-bigword
バインディングは正しく自動補完を表示するようになりました (#5336). -
fish_clipboard_*
機能はwl-clipboard
を使用して Wayland をサポートします (#5450). -
nextd
とprevd
関数はベルの代わりに "Hit end of history" を表示しなくなりました. シンボリックリンクを含む作業ディレクトリを正しく格納します (#6395). -
fish_mode_prompt
関数が定義されているとき, Viモードは常時ではなくモード切替時に実行します. これにより遅いプロンプトの応答性が大幅に向上します (#5783). - パスコンポーネントバインディング (たとえばCtrl-w) は
ssh
などでホスト名とユーザー名の区切り文字として使われるため ":" と "@" で停止します (#5841). -
bind -k nul
でヌル文字にバインドできます. 端末は多くの場合 control-space デコの文字を生成します. (#3189). - 新しい readline コマンド
expand-abbr
を使用して、省略名の展開を実行できます (#5762). - 新しい readline コマンド
delete-or-exit
はカーソルの右側の文字を削除するか、コマンド 行が空の場合はシェルを終了します (この機能をdelete-or-exit
関数から移動します). -
self-insert
readline コマンドは、空でない場合、バインディング シーケンスを挿入します. - 新しいキーバインド Alt-S は
sudo
を先頭に追加します (#6140). - コマンドを説明する Alt-W バインディングは複数行のプロンプトでも動作するはずです (#6110)
- コマンドの man ページを開く Alt-H バインディングは
sudo
を無視します (#6122). - 新しいキーバインドのペア
history-prefix-search-backward
(とforward
) が追加されました (#6143). - ViモードはRで置換モードに入れるようになりました (#6342),
d0
で現在の行を削除できるようになりました (#6292). - Viモードで置換モードでエンターを押したときプロンプトが消去されなくなりました (#6298).
- Viモードで選択操作に含まれる範囲は Vi と同様に振る舞うようになりました (#5770).
プロンプトの改善
- informativeモードのGitプロンプトにスタッシュの数が表示されるようになりました.
- Gitプロンプトに、informativeモードを有効にしなくても(より近代的な)有意な記号を表示できるオプション (
$__fish_git_prompt_use_informative_chars
) が追加されました. - 標準プロンプトにVCS統合機能が追加され、SSH経由で実行している場合はホストをカラー表示するようになりました (#6375).
- 標準プロンプトとサンプルのプロンプトでは直前のコマンドが失敗したときパイプのステータスを表示するようになりました.
- 標準プロンプトとサンプルのプロンプトは、必要に応じて、シグナル名に対する終了ステータスの解決を試みます.
ターミナル出力の改善
- ページャーのカラー出力をさらに多くの要素について設定できる
fish_pager_color_
オプションが追加されました (#5524). - 様々なシステムコンソールで検出とサポートが追加され、色と特殊文字がサポートされました (#5552).
- システムがUnicode9をサポートしているか(と絵文字の表示幅を)推測するようになったので、ほとんどの場合
$fish_emoji_width
を設定する必要がありません (#5722). - ワイド文字、特に韓国語の文字や絵文字の表示が改善されました (#5583, #5729).
- Viモードのカーソルはフォーカス移動を報告するターミナルでフォーカスが与えられたとき正しく再描画されるようになりました (例えばtmux) (#4788).
- 背景色を設定する変数で (例えば
fish_pager_color_search_match
)--reverse
が使えるようになりました.
コマンド補完
- 追加されたもの
aws
-
bat
(#6052) -
bosh
(#5700) btrfs
camcontrol
-
cf
(#5700) -
chronyc
(#6496) -
code
(#6205) -
cryptsetup
(#6488) -
csc
,csi
(#6016) -
cwebp
(#6034) -
cygpath
,cygstart
(#6239) -
epkginfo
(#5829) -
ffmpeg
,ffplay
,ffprobe
(#5922) -
fsharpc
,fsharpi
(#6016) -
fzf
(#6178) -
g++
(#6217) -
gpg1
(#6139) -
gpg2
(#6062) -
grub-mkrescue
(#6182) -
hledger
(#6043) -
hwinfo
(#6496) -
irb
(#6260) -
iw
(#6232) kak
-
keepassxc-cli
(#6505) -
keybase
(#6410) -
loginctl
(#6501) -
lz4
,lz4c
,lz4cat
(#6364) -
mariner
(#5718) -
nethack
(#6240) -
patool
(#6083) -
phpunit
(#6197) -
plutil
(#6301) -
pzstd
(#6364) -
qubes-gpg-client
(#6067) -
resolvectl
(#6501) rg
rustup
-
sfdx
(#6149) -
speedtest
,speedtest-cli
(#5840) -
src
(#6026) -
tokei
(#6085) -
tsc
(#6016) -
unlz4
(#6364) -
unzstd
(#6364) -
vbc
(#6016) -
zpaq
(#6245) -
zstd
,zstdcat
,zstdgrep
,zstdless
,zstdmt
(#6364)
- たくさんのコマンド補完が改善されました.
- コマンド補完のページャーで短縮名を持つロングネームオプションが選択できるようになりました (#5634).
- 末尾スペースが存在する場合、タブ補完でスペースが新たに追加されなくなりました (#6107).
-
and
、not
など補完対象がサブコマンドとして現れる組み込み関数のコマンド補完が正常に動くようになりました (#6249). - オプションの短縮形を組み合わせて記述したときのコマンド補完が正常に動くようになりました (#332).
- 不正なコマンド補完中にコマンド補完を有効にしてもカーソルが移動しなくなり、ミスを修正しやすくなりました (#4124).
- 空のコマンドラインでコマンド補完したとき使用可能なすべてのコマンドが一覧表示されるようになりました.
- 関数以外のコマンド補完の前に関数の一覧を保管すると関数の一部がリークするバグが修正されました.
廃止および削除された機能
- vcs-prompt関数は、二重アンダースコアなしの名前が推奨されているので, __fish_git_prompt は fish_git_prompt に, __fish_vcs_prompt は fish_vcs_prompt に, __fish_hg_prompt は fish_hg_prompt に、__fish_svn_prompt は fish_svn_prompt に変更されました. 古い名前の参照が追加されたので、古い名前もまだ使用可能です (#5586).
-
string replace
の置換式は追加のラウンドがあるので, バックスラッシュのエスケープには多くのバックスラッシュが必要です (例えばstring replace -ra '([ab])' '\\\\\\\$1' a
). 新しい機能フラグregex-easyesc
はこれを無効にし、string replace -ra '([ab])' '\\\\$1' a
のように記述できるようになります (#5556). この機能フラグは将来的にデフォルトになるのでスクリプトの修正が必要になります. -
fish_vi_mode
機能は fish 2.3 で廃止になり, このたび削除されました.fish_vi_key_bindings
を代わりに使用してください (#6372).
配布者と開発者へ
- fish 3.0 では CMake ベースのビルドシステムが導入されました。fish 3.1 では、Autotools ベースのビルドと従来の Xcode ビルドシステムの両方が削除され、CMake ビルドシステムのみが残されています。すべての配布者と開発者は、CMake をインストールする必要があります.
- fish の
psub
プロセス置換機能は外部コマンドtee
に依存しています. - ドキュメントは Sphinx で記述されます. 以前の Doxygen ベースのドキュメントシステムは削除されました. 開発者と配布者は、ドキュメントをビルドしたい場合 Sphinx をインストールしなければなりません.
-
INTERNAL_WCWIDTH
ビルドオプションは削除され, 常にwcwidth
内部関数を使用します. 一般的な使用に適した構成オプションが多数あります (#5777). -
nroff
がインストールされていない場合、mandoc
を使用して--help
の出力を処理できるようになったので,mandoc
がインストールされている場合システムの外部依存を減らします (#5489). - Illumos など Solaris ベースのシステムに存在したビルドに関連するいくつかのバグが修正されました (#5458, #5461, #5611).
-
npm
,bower
,yarn
のコマンド補完の完全な動作にjq
コマンドは不要になり, Python が存在する場合はそれを使用します. - 補完、関数、および設定スニペットのパスが拡張されました。.
XDG_DATA_DIRS
が定義されているシステムでは,fish/vendor_completions.d
,fish/vendor_functions.d
,fish/vendor_conf.d
のサブディレクトリを検索します. この変数が手議されない環境ではインストール時に指定された親ディレクトリかデフォルトの "extra" ディレクトリ, デフォルトでは/usr/local
を検索します (#5029).