Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在Emacs中使用z(跳转)查找目录_Shell_Emacs_Cd - Fatal编程技术网

Shell 在Emacs中使用z(跳转)查找目录

Shell 在Emacs中使用z(跳转)查找目录,shell,emacs,cd,Shell,Emacs,Cd,是一个流行的shell工具,用于在常用目录之间切换。它用作根据关键字完成情况确定要跳转到哪个目录的指标。因此,如果我通常将cd刻录到~/.ssh,我可以zssh跳到那里 我的问题是如何在Emacs中获得相同的功能?也就是说,我希望能够使用ido查找文件或类似的东西,但只需键入几个字符即可跳转到我想要的目录。希望该解决方案能够结合z本身,以便在项目中利用z已经记录的频率度量,我发现抛射()模式非常有用 我使用标准的键绑定C-pf或M-x投射物查找文件 它对文件名进行模糊匹配,并对最近使用的文件进行

是一个流行的shell工具,用于在常用目录之间切换。它用作根据关键字完成情况确定要跳转到哪个目录的指标。因此,如果我通常将cd刻录到
~/.ssh
,我可以
zssh
跳到那里


我的问题是如何在Emacs中获得相同的功能?也就是说,我希望能够使用
ido查找文件
或类似的东西,但只需键入几个字符即可跳转到我想要的目录。希望该解决方案能够结合
z
本身,以便在项目中利用
z

已经记录的频率度量,我发现
抛射
()模式非常有用

我使用标准的键绑定
C-pf
M-x投射物查找文件


它对文件名进行模糊匹配,并对最近使用的文件进行筛选。

我曾经使用过z,但后来我发现,这是受autojump、z或v启发的,而且我发现它更强大,如果我记得清楚的话,这是因为:

  • 它不仅可以查找目录,还可以查找文件
  • 它可以
    cd
    一个结果,也可以使用
    mplayer
    或您的编辑器或其他命令
  • 完成得更好,特别是对于zsh(如果我记得清楚的话,也是这样)。问题是,我经常使用
    d
    别名来更改目录
无论如何,有一个emacs包可以用来查找文件: 这很酷,但它没有我想要的那么互动

编辑:然后我必须更新包,并且:

(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文件缓存命令自动创建书签-option
bmkp 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 :)