有没有办法在nrepl进行历史搜索?

时间:2013-02-28 05:52:39

标签: emacs clojure nrepl

你知道当你点击bash中的向上箭头时它会填写你输入的最后一个命令吗?在nrepl中有没有办法做到这一点?

到目前为止,我一直在进行反向搜索( Cr ),输入相关行的前几个字符,删除行( Ck ),跳到缓冲区的末尾( M-> )并掠过被杀死的行( Cy )。有更简单的方法吗?

2 个答案:

答案 0 :(得分:12)

您可以使用M-pM-n在输入历史记录中向上和向下导航。此外,当前输入可用作搜索模式,即键入要匹配的命令的开头,然后M-p将带您进入下一个匹配。这使用函数nrepl-previous-inputnrepl-next-input。如果您不喜欢这些键绑定,您还可以重新绑定到<up><down>

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

只需将其添加到.emacs(如果您不想重新启动Emacs,请在每行后评估C-x C-e)。另请注意,M-nM-p可能会绑定到其他REPL和comint模式中的类似功能。

答案 1 :(得分:3)

如果您使用的是Cider,则可以将以下内容添加到您的用户配置中:

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

要在下次打开repl时保留历史记录,您还可以选择以下选项:

(setq cider-repl-wrap-history t)
(setq cider-repl-history-size 1000)
(setq cider-repl-history-file "~/.cider-repl-history")
如果您想要持久性历史记录,则需要

cider-repl-history-file。如果使用相对路径,则历史记录将是当前项目的本地历史记录。