Quote the current line

先日はてなブックマークさせていただいたid:lurkerさんからトラックバックを頂きました。

この間書いた Meta+なんとか で 最後の引数補完したりするやつなんですが、 id:agw さんに、 zshを使ってみたくなる良エントリ。 と言っていただいた。 嬉しい。。ですが、 zsh だけじゃなくて bash でも大丈夫です! むしろ bash で使えるのがうれしいです。

一つ前のエントリを拝見した際に、Mac OS X + X11 + bashという組み合わせで再現出来ませんでしたが、zshでは出来たため上述のようなコメントをさせていただいたのですが、id:lurkerさんによるとbashでも使えるとのことでしたため、調べてみました。


多分にこの挙動はreadlineの設定次第なのだろうなと思い、まずzshバインディングを列挙してみました。

bash$ zsh -c bindkey
            :
"^[?"" quote-region
"^[?$" spell-word
"^['" quote-line
            :

なるほど、quote-region、spell-wordおよびquote-lineがid:lurkerさんが指摘されているウィジェットのようです。以下は、man zshzle(zsh command line editor)から引用です。

                                 :

  quote-line (ESC-') (unbound) (unbound)
         Quote  the  current  line;  that  is, put a `'' character at the
         beginning and the end, and convert all `'' characters to `'?'''.

  quote-region (ESC-") (unbound) (unbound)
         Quote the region from the cursor to the mark.

                                 :

  spell-word (ESC-$ ESC-S ESC-s) (unbound) (unbound)
         Attempt spelling correction on the current word.

                                 :

多分にこれらはコマンドとしてreadlineに含まれており、bashではデフォルトでバインディングされていないのだろうなと思ったのですが、readline、bash双方のマニュアルを読んでも見つけることが出来ませんでした。念のためFedora Core 4 + X11 + bashの環境でも試してみたのですが、やはり見つけられませんでした。

...といったところで私はヘタレてしまったのですが、id:lurkerさん、是非解決編をお願いします!

追記

元々のid:lurkerさんの記事では、insert-last-wordについて言及されており、quote-lineおよびquote-regionがbashで使える、という表記はありませんでした。私の読み違えでした。

また、今エントリを受け、bindによる簡易quote-lineエントリをid:lurkerさんが記載してくださいました。これまた良エントリです。