Shell 在Emacs中使用z(跳转)查找目录
是一个流行的shell工具,用于在常用目录之间切换。它用作根据关键字完成情况确定要跳转到哪个目录的指标。因此,如果我通常将cd刻录到Shell 在Emacs中使用z(跳转)查找目录,shell,emacs,cd,Shell,Emacs,Cd,是一个流行的shell工具,用于在常用目录之间切换。它用作根据关键字完成情况确定要跳转到哪个目录的指标。因此,如果我通常将cd刻录到~/.ssh,我可以zssh跳到那里 我的问题是如何在Emacs中获得相同的功能?也就是说,我希望能够使用ido查找文件或类似的东西,但只需键入几个字符即可跳转到我想要的目录。希望该解决方案能够结合z本身,以便在项目中利用z已经记录的频率度量,我发现抛射()模式非常有用 我使用标准的键绑定C-pf或M-x投射物查找文件 它对文件名进行模糊匹配,并对最近使用的文件进行
~/.ssh
,我可以zssh
跳到那里
我的问题是如何在Emacs中获得相同的功能?也就是说,我希望能够使用
ido查找文件
或类似的东西,但只需键入几个字符即可跳转到我想要的目录。希望该解决方案能够结合z
本身,以便在项目中利用z
已经记录的频率度量,我发现抛射
()模式非常有用
我使用标准的键绑定C-pf
或M-x投射物查找文件
它对文件名进行模糊匹配,并对最近使用的文件进行筛选。我曾经使用过z,但后来我发现,这是受autojump、z或v启发的,而且我发现它更强大,如果我记得清楚的话,这是因为:
- 它不仅可以查找目录,还可以查找文件
- 它可以
一个结果,也可以使用cd
或您的编辑器或其他命令mplayer
- 完成得更好,特别是对于zsh(如果我记得清楚的话,也是这样)。问题是,我经常使用
别名来更改目录d
(setq fasd-enable-initial-prompt nil) ;; don't ask for first query but fire fuzzy completion straight away.
还有一个用例尚未完成:
如何在emacs shell中使用带完成的fasd(或autojump或z)?
我经常使用emacs的shell模式。当我使用我最喜欢的别名d
时,它可以工作,但我根本没有完成。在这里,zsh的完成显然是缺失的。例如,我想使用ido补全。我写了一个小函数,你可以很容易地适应z:
编辑:完成命令并添加由选项卡触发的ido完成。现在键入d
(d后跟空格)。如果它不断变化,如果我成功创建了一个次要模式,我会将链接发布到我的gitlab repo
编辑:我为此功能创建了一个模式:
;;使用fasd命令行实用程序更改最近访问的目录等。
(定义fasd获取路径列表(模式)
“使用模式调用fasd并返回可能性列表”
(s-split“\n”(s-trim(shell命令转换为字符串(格式为“fasd-l-R%s”模式)))
)
(defun fasd)
“如果当前shell命令为'd something',请调用fasd”
(互动)
(let*((用户输入(缓冲区子字符串无属性)(输入行起始位置)
(最大点)
(if(and(string=(substring user input 0 2)“d”);;todo:映射以使用d以外的内容并更改目录。
(项目
;得到“d”之后的内容
(setq fasd模式(缓冲区子字符串无属性(+(输入行起始位置)2)(最大点)))
(setq fasd命令(concat“cd”(ido完成读取“cd to:”(fasd获取路径列表fasd模式)))
(comint kill输入)
(插入fasd命令)
(comint发送输入)
))))
;; 像在普通shell中一样使用TAB。现在我们的完工率甚至比zsh还要高!
(定义键外壳模式映射(kbd“”)‘fasd);;工作就像一个符咒:)
顺便说一句,我不经常使用它,因为我在当前缓冲区的目录中用and(一个下拉终端,如guake for gnome)打开Shell。不完全是你问题的答案,但也许你应该看看。召唤@Drew。@tripleee:对不起,冰柱并没有任何现成的东西来帮助你。它使您可以轻松访问最近使用的文件,而不仅仅是目录。(它利用了
recentf list
)我猜有些东西很适合这个请求,但我不知道。使用可以使用Dired书签,但书签创建不是自动的(即使是自动命名的书签,也需要按一个键)。(或者你可以让Emacs文件缓存命令自动创建书签-optionbmkp autofile filecache
)@tripleee:好吧,我收回了书签从未自动过的部分。Bookmark+doc的功能描述了一种自动书签功能。我不能说这在这里是否有用。@tripleee:最后一条评论:可以很容易地添加使用谓词控制自动书签的可能性(例如,书签只能在Dired缓冲区中自动创建,或者在月亮满月或其他任何时候自动创建)。目前,控制自动创建的唯一参数是(a)空闲时间和(b)与其他自动书签的距离。您好,您找到适合您的解决方案了吗?我使用helm ls git ls
查找项目中的文件。我需要的是一种快速跳转到项目目录的方法。您可能对Sproject的helm界面感兴趣,可以在定义了多个动作的项目之间切换,其中一个动作是在项目目录中打开dired。这是一个即将推出的功能:请参阅我的第二次编辑:我为此功能创建了一个次要模式。
;; Use the fasd command line utility to change recently visited directories and more.
(defun fasd-get-path-list (pattern)
"call fasd with pattern and return the list of possibilities"
(s-split "\n" (s-trim (shell-command-to-string (format "fasd -l -R %s" pattern))))
)
(defun fasd ()
"If current shell command is `d something' call fasd"
(interactive)
(let* ((user-input (buffer-substring-no-properties (comint-line-beginning-position)
(point-max))))
(if (and (string= (substring user-input 0 2) "d ")) ;; todo: mapping to use something else than d and change directory.
(progn
;; get what is after "d "
(setq fasd-pattern (buffer-substring-no-properties (+ (comint-line-beginning-position) 2) (point-max)))
(setq fasd-command (concat "cd " (ido-completing-read "cd to: " (fasd-get-path-list fasd-pattern))))
(comint-kill-input)
(insert fasd-command)
(comint-send-input)
))))
;; Use TAB as in normal shell. Now we have even better completion than in zsh !
(define-key shell-mode-map (kbd "<tab>") 'fasd) ;; works like a charm :)