差点忘了这回事了……我是这么写的:
(defun moon-put-region-in-search-history (count)
"Put region into evil-search history.
COUNT is passed to evil-search command."
(when (evil-visual-state-p)
(let ((region (buffer-substring-no-properties
;; evil seems to treat point differently,
;; so I added 1 to end point
(region-beginning) (1+ (region-end)))))
(push region evil-ex-search-history)
(setq evil-ex-search-pattern (evil-ex-make-search-pattern region))
;; (push region evil-ex-s)
(evil-normal-state)
)))
(advice-add 'evil-ex-search-forward :before #'moon-put-region-in-search-history)
@amosbird 谢谢你的指点
这行比较关键:
(setq evil-ex-search-pattern (evil-ex-make-search-pattern region))
更新evil-ex-search-pattern
才能让gn
指向选中的region。
最终的效果是:
- 选中region
- /,region自动加入搜索历史
- esc退出搜索
- cgn开始修改
- .重复修改
当然可以吧这个advice做成command绑定到一个键上,就不用/再esc按两个键了。