シェルでワンライナーを入力するときに悩まされるのがクオート問題です。
スペースを含む文字列を引数で渡す場合はクオートするか、スペースをエスケープする必要があります。
bashやzshだとシングルクォートの中にシングルクォートを書けませんが、fishだとシングルクォートをエスケープできます。

実際に操作してみればわかりますが、これがあるのとないのとでは雲泥の差です。

そこで、interactive関数 quoted_insert を示します。
これを使えば文字列をそのまま入力するだけで、適切にクォート・エスケープされた文字列をコマンドラインに入力された状態になります。

キーに割り当てることでfishのコマンドラインを快適にする関数を
本サイトにおいては便宜的にinteractive関数と呼んでいます。

関数

~/.config/fish/functions/quoted_insert.fish に以下の内容を書きます。

function quoted_insert
	read -l -p 'echo "quoted_insert> "' str
        commandline -i "'"(string replace -ar "['\\\\]" '\\\\\\\\\\${0}' "$str")"'"
end

キー割り当て方法

fishにおいて自分用のinteractive関数をキーに割り当てるには、
fish_user_key_bindings関数を定義して、そこでbindコマンドを使います。

fish_user_key_bindings 関数は ~/.config/fish/config.fish あるいは
~/.config/fish/functions/fish_user_key_bindings.fish に書きます。

ここではCtrl+Qにquoted_insertコマンドを割り当てます。

function fish_user_key_bindings
        # ...
        bind \cq quoted_insert
end

実行例

$ ruby -e ★ここでCtrl+Qを押す
quoted_insert> puts 'ok' ★このように入力してEnterを押すと
$ ruby -e 'puts \'ok\'' ★クオート・エスケープされた状態で入力される
ok

★ネスティングも可能
$ fish -c ★ここでCtrl+Qを押す
quoted_insert> fish -c ★ここでCtrl+Qを押す
quoted_insert> echo 'ok'
quoted_insert> fish -c 'echo \'ok\''
$ fish -c 'fish -c \'echo \\\'ok\\\'\''
ok

最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。