我使用helm-ag 搜索文本内容.当键入关键词后,会列出来一堆匹配内容.此时我可以按快捷键进行浏览跳转.但是一旦这个helm-minibuffer关闭之后,之前的快捷键浏览就失效了.像vim那个quickfix,即使quickfix隐藏关闭了,跳转的快捷键还是有效的.因为下面开着一个minibuffer,既占地方,又影响视线.有没有办法,搜索结果出来后,可以选择把minibuffer隐藏掉,然后用快捷键自由的进行向前向后的浏览的方法.
ivy 有 ivy-occur,helm 应该也有 helm-occur。
哦理解错误,你意思是不要显示搜索结果还想跳转。
听起来像isearch的行为,isearch不可以吗
如果是单个文件,evil模式/
搜索,然后在normal-state下按n或者N就能跳转,如果是多个文件,不知道有什么好的解决方式,想法是记录搜索结果列表的每一个action,然后自定义按键跳转到下一个action并执行
没看明白你的问题,尤其是标题。
Helm 有 Resume 的功能(Ivy 也有),见 M-x helm-resume
,加一个 C-u
会列出所有的 Helm Session。如果常用 Helm 的话,这个应该是必会命令。
他说的应该是 :cn(ext)
和 :cp(revious)
命令。
就是这个😂,helm minibuffer必须开着,一旦关了,就不行了
如果用ivy-occur
或者occur
的话,在window关闭之后可以用M-x next-error
或者M-x previous-error
来跳转
是啊,不然会很不方便感觉
helm 激活之后,按键消息是由 helm 创建出来的 session buffer 接收,一旦 session buffer 关闭,按键的控制权又还给编辑区的 buffer。
而 session buffer 并没有立即销毁(即便销毁也无虞,可在退出之前另存副本),可以通过 helm-resume
召回,也可以自行写代码来访问:
(defun helm-ag-find-next (&optional n)
(interactive)
(let* ((helm-current-buffer (get-buffer "*helm-ag*")))
(with-helm-current-buffer
(forward-line (or n 1))
(helm-ag--action-find-file
(buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
(defun helm-ag-find-prev ()
(interactive)
(helm-ag-find-next -1))
以上可在回到编辑状态之后继续跳转。(我没有仔细研究 helm,也许有更简单的方法。)
如果想在回到编辑状态之后,依然使用 helm 激活时的快捷键(假设为 C-n/p
)。那么就必须实现一个临时的模式/状态。既隐藏 helm 窗口,同时仍然掌控按键:
------------ --------------
[ major-mode ] [ helm visible ]
------------ --------------
| |
| |
| start helm |
|--------------------------------------->|
C-n/p | | C-n/p
上/下行 | ------------- | 前/后跳转
| [ helm hidden ] |
| ------------- |
| | |
| | hide helm |
| |<--------------------/
| |
| | C-n/p
| | 前/后跳转
| exit helm |
|<-----------------/
|
|
我觉得有两个思路:
- 实现一个
helm-XXX-minor-mode
,当 helm 窗口关闭之后,启动这个 mode 继续控制按键。 - 把 helm 窗口尽可能最小化(我不知道能小到什么程度,最好是完全隐藏),视觉上关闭 helm,实际它仍然在工作。
无论如何,最后都需要一个额外的消息,告诉 helm:这回真的退出了,把控制权交还给编辑区 buffer。
EDIT:
-
helm-ag-find-{next,prev}
配合 hydra 应该就可以实现本回复第二部分所描述效果:回到编辑状态之后的便捷跳转。参考:大家有没试过按 ctrl 按到手指痛?#18 -
楼主需要一个更清晰的标题,例如:
《如何在 helm-ag 窗口关闭之后继续跳转?》