Search code examples
emacsclojurenrepl

Is there a way to do a history search in nrepl?


You know how when you hit the up arrow in bash it will fill in the last command you typed in? Is there any way to do this in nrepl?

So far I've been doing a reverse search (C-r), typing the first few characters of the line in question, killing the line(s) (C-k), jumping to the end of the buffer (M->) and yanking the killed line (C-y). Is there an easier way to do this?


Solution

  • You can use M-p and M-n to navigate up and down in the input history. Also, the current input can be used as a search pattern, i.e. type the start of the command you want to match, then M-p will take you to the next match. This uses the functions nrepl-previous-input and nrepl-next-input. If you don't like those keybindings, you can also rebind to <up> and <down>:

    (define-key nrepl-mode-map (kbd "<up>") 'nrepl-previous-input)
    (define-key nrepl-mode-map (kbd "<down>") 'nrepl-next-input)
    

    Just add this to your .emacs (and evaluate C-x C-e after each line if you don't want to restart your Emacs). Also, note that M-n and M-p are likely to be bound to similar functionality in other REPL and comint like modes.