Hi, I use this to always display the *Help* buffer in the selected window, or to reuse existing window displaying the same buffer: (add-to-list 'display-buffer-alist '("^\\*Help\\*$" . ((display-buffer-reuse-window display-buffer-same-window)))) With this, whenever I forget the keybindings available during query-replace and hit '?' to get help, the help buffer is displayed in the main window which shows the replacements to be performed. When I try to bury the help buffer with 'q', it doesn't do what I intended - it quits the query-replace session. The same thing happens when I try to switch to the main window with 'C-x o' and manually kill the buffer. The only thing that works really, is to enter recursive edit, kill the help buffer and exit-recursive-edit. This happens because the help buffer generated by perform-replace is named "*Help*" and my display-buffer rule matches it. I work around this by adding an additional rule to display-buffer-alist which checks if the help buffer was created by perform-replace. It's ugly: (defun my//display-buffer-help-for-query-replace-condition (bufname action) (and (string-match-p "\\*Help\\*" bufname) (catch 'res (mapbacktrace (lambda (_evald func _args _flags) (when (eq func 'perform-replace) (throw 'res t))))))) (add-to-list 'display-buffer-alist '(my//display-buffer-help-for-query-replace-condition . (display-buffer-pop-up-window))) There are a couple of ways to improve behavior of perform-replace: - Use a different name for the query-replace help buffer (patch attached) - Make 'C-l' or some other key bury the help buffer, if it was displayed in the main window - Make '?' toggle visibility of the help buffer - Allow switching windows in query-replace - Display the help message in the minibuffer