前置き
zshの便利な機能にコマンドラインスタック(buffer stack)というものがある。
入力途中のコマンドを一時的に退避出来るというものだ。
zshではAlt+q
に割り当てられていて、長いシェルとか書いているときに、
ちょっと確認したいことがでてきちゃった時とかにとても重宝する。
on fish
でもfishにはないみたいだった。めっちゃ不便だ…… 積み重なるqの文字の山に我慢しきれなくなったので、作った。
正確に言うと、絶対誰かやってるでしょって思ってcommandline stack
とかbuffer stack
で検索したけど、全然出てこなかったので、作った。
その後に、ふと以下の結果が得られたので、
% bindkey | grep q "^V" quoted-insert "^[\"" quote-region "^['" quote-line "^[q" push-line
push-line
で検索したところ、dedeibel/push-line.fish
がみつかった。
fish_postexec functionを関数内で生成して終わったら消すとかいうかっこよすぎる感じだった。
試してみたら、最高という感じだったのだけれども、killingを汚す&C-wとかやっちゃうと当然そっちで上書きされちゃうっていう問題が発生した。 ので自分で作ってた部分と統合して改良した。 まあグローバル変数を汚すのもどうなのだという話はあるけれど。
複数行のコマンドをスタックしようとしたらtest -n
のところで怒られたので、修正しないと駄目かも。あとすごい適当にrepaintを呼んでいるので、ちゃんと正確に理解して使いたい。
Happy Fishing!!!!
2017/09/28追記
複数行でもエラーが出ないように修正した。
余談
全く関係ないんですが、hatenaの記事を書くときにリアルタイムプレビューが出来るようになったのは割と革命的ですね。パソコンの性能か、若干動作が重くなるのは難点だけど。