OS X上的dired排序错误

hat*_*rix 12 macos emacs dired

在OS X 10.5 Emacs 23.2上,在dired-mode中,如果我尝试dired-sort-toggle-or-edit使用前缀参数进行排序,--sort=extension或者-X得到:

insert-directory: Listing directory failed but `access-file' worked
Run Code Online (Sandbox Code Playgroud)

并且dired缓冲区变空.我尝试过设置

(setq dired-use-ls-dired nil)
Run Code Online (Sandbox Code Playgroud)

但这没有效果.dired-sort-toggle-or-edit并通过扩展排序似乎在我的Ubuntu框上工作正常.有人知道发生了什么事吗?

hat*_*rix 12

目前,我还发现了另一种解决方案 ls-lisp

(when (eq system-type 'darwin)
  (require 'ls-lisp)
  (setq ls-lisp-use-insert-directory-program nil))
Run Code Online (Sandbox Code Playgroud)

  • 是否可以将`insert-directory-program`设置为eshell的`ls`? (2认同)

Eri*_*ven 8

ls所安装的OS X不支持-X或任何长篇大论喜欢--sort.设置dired-use-ls-dired不会有任何影响; dired将始终使用ls,但如果该变量为非nil,则它将传递--dired给ls.

如果你想要那种类型的排序,你可以使用像fink这样的东西来安装coreutils,这将提供更像你在Ubuntu中习惯的东西.

  • 我通过Homebrew安装了`coreutils`,它显然安装了`/ usr/local/bin/gls`.我对这个`/ usr/local/bin/ls`进行了解决,然后我再也没有在Emacs中得到错误. (7认同)
  • @duma:在Yosemite 10.10.3下,这对我不起作用.此外,我还使用了`(setq insert-directory-program"/ usr/local/bin/gls"); 在`.emacs`中使用适当的GNU ls`并且它有效 (5认同)

law*_*ist 8

以下是使用coreutils通过macports安装在Snow Leopard 10.6.8上运行的Emacs的步骤:

注意:我的macports安装与generic(/opt/...)不同- 即,我/macports用作root.不需要改变根设置,这只是我的个人偏好.对于vanilla macport安装或替代设置,请相应地调整路径.

sudo /macports/bin/port install coreutils
Run Code Online (Sandbox Code Playgroud)

这进入.emacsinit.el:

;; sort directories first

(setq insert-directory-program "/macports/bin/gls")

(setq dired-listing-switches "-aBhl --group-directories-first")
Run Code Online (Sandbox Code Playgroud)

用一个符号链接:NOTE gls/ ls推荐,因为它打破了MacPorts的功能,安装和最有可能其他的东西了.


对于需要更多控制权的用户的替代安装:

下载: coreutils-8.21.tar.xz来自:http:   //ftp.gnu.org/gnu/coreutils/

如果您没有用于解压缩*.xz文件的实用程序,则可以使用诸如此类的实用程序TheUnarchiver3.9.1.

这是一个快速参考coreutils- 我将安装位置设置为我自己的个人偏好而不是默认值:

./configure \
--prefix=/Users/HOME/.0.data/.0.emacs/elpa

make

sudo make install
Run Code Online (Sandbox Code Playgroud)

这些插入到你.emacsinit.el文件-相应地调整路径:

;; sort directories first

(setq insert-directory-program "/Users/HOME/.0.data/.0.emacs/elpa/bin/ls")

(setq dired-listing-switches "-aBhl --group-directories-first")
Run Code Online (Sandbox Code Playgroud)


ggr*_*cca 7

2020年依然发生!如果像我一样,您使用brew作为开源包管理器,并且您已经安装了coreutils brew install coreutils,那么这是将粘贴复制到您的.emacs文件中或保存启动自定义的任何位置的正确解决方案:

(when (equal system-type 'darwin)
  (setq insert-directory-program "/insert/here/path/to/homebrew/ls"))
Run Code Online (Sandbox Code Playgroud)

(我检查操作系统是因为我在多个系统上部署 Emacs 配置)。

当前路径:

/opt/homebrew/opt/coreutils/libexec/gnubin/ls
Run Code Online (Sandbox Code Playgroud)

以前(2022 年之前?)它曾经是:

/usr/local/opt/coreutils/libexec/gnubin/ls
Run Code Online (Sandbox Code Playgroud)

与往常一样,如果您已将 gnu ls 配置为当前选择的 shell 中的默认命令,则始终可以通过键入 来检查其当前的完整路径which ls

奇怪的是,这种情况突然发生在 Mojave 系统上,我从那时起就经常在该系统上使用 Emacs,并且我确信 dired 过去一直在该系统上工作。我猜想更新破坏了一些东西,使得 Dired 使用正确的二进制文件,而无需手动设置它。

  • 对于遵循此答案的任何人,您还需要安装 coreutils(通过brew)才能正常工作。这可以通过命令“brew install coreutils”来完成。 (2认同)