僕の環境限定かわかりませんが、
最近M-%(query-replace)を使っていて、
いきなりエラーになることがあります。

こんな感じに
リストが入るべきところに
コンスセルが入ってくるのです。

Debugger entered--Lisp error: (wrong-type-argument listp "キー名")
  mapcar(#[略] (#("キーの名前" 略) . "キー名"))
  query-replace-read-from("Query replace" nil)

コンスセルが入ってくるその変数は
query-replace-defaults ですので

(setq query-replace-defaults nil)

を設定すれば直ることがわかっています。

毎回M-:やeshellで
設定するのは面倒ですので、
アドバイスを書いて対策しています。

最初はvisual-regexpや
visual-regexp-steroids固有の
問題かと思いましたが、

通常のquery-replaceを使っていても
エラーが起きましたので、
Emacsのバグの可能性があります。

同じ問題に悩まされている方は
以下のアドバイスを設定してみてください。

設定 50query-replace-fix.el(以下のコードと同一)

(defun query-replace-read-from--fix-error (&rest them)
  (condition-case _
      (apply them)
    (error (setq query-replace-defaults nil)
           (apply them))))
(advice-add 'query-replace-read-from :around
            'query-replace-read-from--fix-error)

実行方法

$ wget http://rubikitch.com/f/50query-replace-fix.el
$ emacs -Q -f package-initialize -l 50query-replace-fix.el

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