emacs dired-mode:如何“退出”并进入当前目录的shell?

10
在 Mac OS 上,我可以使用终端,输入 "cd " ,然后从 Finder 中拖放文件夹到终端。然后我会得到像 "cd /Users/..." 这样的内容,这使我能够快速切换到相应的目录。
如果我使用 M-x shell 打开一个 Emacs shell,并将一个文件夹拖放到它上面,Emacs 会切换到 dired 模式并显示我所拖放的文件夹的内容。如何"退出"或"退出"dired-mode 并获得已更改为所拖放文件夹的目录的 shell 呢?这将给我带来像上面那样的效果,这将非常有用。

1
如果您在emacs中启动shell(M-x shell),它将在列出的目录中启动。您还可以在按下M-!后运行一个shell命令,该命令将在该目录中启动。 - choroba
谢谢,但那不是重点。我打开了一个 shell,使用 M-x shell 命令启动。当然,这个 shell 是在我调用 M-x shell 命令时所在的目录中打开的。但现在,我在 dired 模式下导航到另一个目录。问题是,我不想从那里打开文件,我只想离开 dired 模式并回到 shell 提示符,但现在 shell 应该已经 cd 到我在 dired 模式下导航到的目录。因此,输入 pwd 命令应该显示我在 dired 模式下导航到的目录。如果我只是按“q”键,我会回到原来的目录,而不是我导航到的目录。 - Marius Hofert
@choroba,M-x shell 对我不起作用。 使用 M-- M-x shell 取而代之。 - Cosmin Sontu
1个回答

7
你可以实现一个函数来打开一个shell而不是dired buffer。这个函数在许多其他情况下也很有用,不仅限于DnD的情况。
(require 'dired)
(define-key dired-mode-map "c" 'shell-instead-dired)

(defun shell-instead-dired ()
  (interactive)
  (let ((dired-buffer (current-buffer)))
    (shell (concat default-directory "-shell"))
    (kill-buffer dired-buffer) ;; remove this line if you don't want to kill the dired buffer
    (delete-other-windows)))
编辑:在这种情况下,您需要在Emacs中拖放一个目录并按“c”键调用此目录中的shell。
否则,您可以安装smart-dnd软件包,并配置它以打开一个shell。如果您拖放了一个jpg,则还提供其他有用的东西,例如在html模式下创建<img ...>标签,或者在c-mode下拖放头文件时创建#include<...>

2
好的,我明白了,这不是一件容易的任务。到目前为止,我只使用以下步骤: 1)键入 M-x dired 2)使用“a”导航到您喜欢的文件夹 3)键入 C-u M-x shell => 这个shell会在您在第2步中导航到的文件夹下打开。 - Marius Hofert
嗯,这都是关于速度的问题。你将一个目录拖放到Emacs中,它会在dired模式下显示。使用我的解决方案,你只需按下一个键“c”,就可以打开一个带有唯一名称的shell并关闭dired缓冲区。 - Oleg Pavliv
1
你需要添加(require 'dired)。 - Oleg Pavliv
当您使用操作系统导航器(Windows的资源管理器,Mac的Finder)时,您只需要在Emacs中拖放一个目录并按“c”键即可。否则,您可以从Emacs中的dired导航到所需目录后按“c”键。 - Oleg Pavliv
M-- M-x eshell 对我来说已经足够了。 它相当于 C-u M-x eshell,但我认为这是一个小改进。 - Cosmin Sontu
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接