はじめに
この記事は 大阪公立大学高専 Advent Calendar 1 日目の記事です。
本題
predict-on を使え
この記事は fish を勧める記事 "ではありません"。
世の中には、zsh に唯一無二の機能 (のはず) である predict-on を使わずに、外部のプラグインである zsh-autosuggestions, zsh-autocomplete などを導入し、半ば fish のように zsh を扱っている不届き者 方々が多いように思えます。
zsh の前方予測補完機能である predict-on を再評価してもらおうというのが、この記事の目的です。
Q. そもそも predict-on はどんな機能なの?
~なんかうまいことキー入力をしたらどうなるかをわかりやすく(どのキーを入力したかを可視化するなど) gif を貼る~
Q. 引数を同じにしてコマンドのみを変えたいときにストレスでは?
において、
例えばless article.mdと入力したあと、vim article.mdにしたくなったとします。ここで、lessを消してvimと入力していると、article.mdの部分が消されてしまいます。引数は同じままコマンドを変えたい場面は頻繁に起こるのでこれはストレスですよね。
そして、このpredict-onが無効になればzshの補完はとんでもなく快適になるのです。ぶっちゃけ邪魔以外の何者でもありません。
という記述がありますが、この記述でいう "ストレス" は zsh においてデフォルトだと Ctrl-k に割り当てられた、 kill-line というカーソル位置から行末までを消す (kill する) コマンドを少し改良したものを使えば 8 割くらい軽減されます。
"少し改良" が具体的に何か:
zsh の kill-line はデフォルトだと kill した文字列をクリップボードには保存せず、どっかに捨て去ってしまいます。これをクリップボードに保存するようにすれば、引数のみを kill してコマンドを削除すればそれでよくなります。
pbcopy が入っている環境ならば zsh で C-k(kill-line)と C-y(yank)をクリップボードと共有する · GitHub のコードを .zshrc に追記すれば簡単です。
pbcopy がなくても Rust があるならば、 github.com を使えばいい感じにクリップボードと連携してくれます。(自作プラグインの宣伝になってしまいますが、実際 predict-on のこのストレスを解消するために作ったようなもんです)
Q. そもそもそこまで優秀ではなくない?
新しく環境を作り直した際に zsh のヒストリを引き継がなかった場合は、predict-on は本領を発揮してくれません。長年秘伝のタレのように積み上げてきた zsh のヒストリを最大限活かすのが predict-on です。1000 年以上生きた zsh 使いはきっと predict-on を使っているでしょう。
おまけ
実は predict-on はコメントを含めても 150 行に満たないコードで作られている機能です。 1 回は目を通してみると愛着が深まる気がします。(さすがにシェルスクリプトはわかんないので GPT-3.5 に投げてコメントをつけてもらいました)