Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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
Emacs-需要目录中的所有文件_Emacs_Directory_Elisp_Require - Fatal编程技术网

Emacs-需要目录中的所有文件

Emacs-需要目录中的所有文件,emacs,directory,elisp,require,Emacs,Directory,Elisp,Require,我熟悉load path和require,但我想知道是否可以将init.el中的多个require语句合并到某种循环中,最终执行类似于require的操作,将给定目录中的所有文件合并 有没有办法做到这一点?或者我应该保持原样,使用多个require语句吗?您可以尝试以下方法: (mapc(lambda(名称)) (需要(实习生(文件名无扩展名))) (目录文件“.emacs.d”nil“\\.el$”) 说明: 使用目录文件 使用文件名无扩展名删除扩展名 使用intern和require获取与

我熟悉
load path
require
,但我想知道是否可以将init.el中的多个
require
语句合并到某种循环中,最终执行类似于
require
的操作,将给定目录中的所有文件合并


有没有办法做到这一点?或者我应该保持原样,使用多个
require
语句吗?

您可以尝试以下方法:

(mapc(lambda(名称))
(需要(实习生(文件名无扩展名)))
(目录文件“.emacs.d”nil“\\.el$”)
说明:

  • 使用
    目录文件
  • 使用文件名无扩展名删除扩展名
  • 使用
    intern
    require
    获取与文件基名称关联的符号
    • 使用
      load
      ,而不是
      require
      ,因为功能名称(来自
      provide
      )不一定与文件的基本名称相同。或者该文件甚至可能不提供功能
    • 仅当文件尚未加载(或您已尝试加载)时才加载该文件

    我同意Drew的观点,在这种情况下,您希望使用
    load
    。此函数基于Drew的代码,并进行了一些调整,以避免在同时存在.el和.elc版本时重新加载库

    (在目录(dir)中取消我的全部加载)
    “`load'目录DIR中尚未加载的所有elisp库。”
    (互动式“D”)
    (让((已加载库)(mapcar#'文件名-sans扩展名
    (delq nil(地图车#'车辆装载历史'))))
    (文件(目录文件目录“+\\.elc?$”)
    (let((库(文件名,无扩展名文件)))
    (除非(已加载成员库)
    (加载库nil t)
    (推送已加载的库(()()())))
    
    我会使用“load”,但这样做会使Emacs的启动与使用“require”不同。具体地说,不是一次应用所有自定义设置,而是在“加载”时会发生许多快速的视觉变化(如更改模型线颜色等),而在“需要”时则不会发生。有没有一个钩子可以让我把它放进去,这样就可以用更少的视觉惊喜来应用文件内容?
    require
    只是
    load
    的包装器。这两者之间应该没有区别,除非您两次加载库,并且此函数应该防止这种情况发生。这个问题唯一的不同点可能是加载目录文件的顺序。您可以尝试将
    (directory files dir t.+\\\.elc?$“t)
    更改为
    (directory files dir t.+\\\.elc?$)
    (即删除最后一个参数),这将为您提供与已接受答案相同的排序。我自己实际上发现了它看起来不同的原因。事实证明,加载消息使加载过程本身看起来是异步的,因此我将一个参数传递给
    load
    禁用它。谢谢良好的定位
    require
    的C代码确实调用了
    load
    ,而
    NOMESSAGE
    设置为
    t
    。我将相应地更新答案。感谢您提供上述功能——它非常有用。请您解释一下mapcar在(mapcar#'file-name-sans-extension(delq nil(mapcar#'car load history))中的用法,特别是“#”的意义。
    (let ((loaded  (mapcar #'car load-history)))
      (dolist (file  (directory-files "~/.emacs.d" t ".+\\.elc?$"))
        (unless (catch 'foo
                  (dolist (done  loaded)
                    (when (equal file done) (throw 'foo t)))
                  nil)
          (load (file-name-sans-extension file))
          (push file loaded))))