在使用Helm Basic Save Buffer时,如何从当前工作目录,快速跳转到其它特定目录?

spacemacs

#1

在保存新建的Buffer中内容时,默认出现在Heml Basic Save Buffer中的目录并不是我希望使用的保存目录。

而自己需要保存的目录,

  • 可能是自己经常使用的几个目录之一(比如macOS的Desktop、或Download、或Documents等常用目录);
  • 也可能是自己需要通过关键词搜索匹配出的某个目录(类似Projectile可以实现?);

我感觉似乎需要用到Bookmar或Projectile来实现。而且我已经折腾了一下,但是两个package在我的Spacemacs中都无法实现让我在Helm Basic Save Buffer上从当前默认目录,迅速跳转到我想保存的其它目录这个功能需求。

不知类似这种操作,各位道友都是怎么操作的。


#2

直接输入目录名,适时借助文件名补全。比如 ~/De + TAB 大概就能到桌面了。总共就这么几个按键,似乎没什么再简化的空间。


#3

有时候需要把当前正在编辑的一个新建Buffer的内容,Save到某个路径比较长的目录下(比如 ~/目录1/目录2/目录3/目录4/目录5/目录6)。

这时如果单纯使用一步步的“输入字母”,TAB,补全;然后再继续这个操作循环的过程,是相当耗时且重复的。

而这个路径比较长的目录可能已经存在自己的Bookmark里了。

不知道,是否可以在Helm Basic Save的Mini Buffer中,直接调出Bookmark中的目录,实现快速的目标目录输入。


#4

可以,这是 Recursive Edit(即在一个 MiniBuffer 中间使用另一个 Minibuffer)的使用场景。对于 Helm 用户,一个最直观的应用是 helm-show-kill-ring,你可以在譬如 M-! (shell-command) 中间使用这个命令。你的任务是实现「调出Bookmark中的目录,实现快速的目标目录输入」,可能像

(defun insert-favorite-directory ()
  (interactive)
  (insert
   (completing-read "Your Favorite Directory: "
                    ;; FIXME 过滤 bookmark-alist
                    '("~/Desktop" "~/Downloads" "~/Documents"))))

#5

P.S. 如果你没有启用 Recursive Edit 的话,可以 let-binding enable-recursive-minibuffers 以临时启用它。