Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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_Elisp - Fatal编程技术网

Emacs搜索并打开多个文件,并搜索所有缓冲区

Emacs搜索并打开多个文件,并搜索所有缓冲区,emacs,elisp,Emacs,Elisp,我目前正处于向Emacs转换的开始阶段。但是我有两个基本问题 如何从特定路径递归搜索多个文件?我假设我必须使用find/grep/dired,但我不确定。例如,我希望在路径C:/src/xxx中找到所有*.scala文件。找到这些文件后,我还希望立即在缓冲区中打开它们。我目前唯一熟悉的方法是C-xC-f 当所有这些文件都在缓冲区中时,如何在所有缓冲区中搜索,并获得某种结果列表和/或可能能够在结果之间导航?我想找到所有带有case Int=>文本的地方 对于A部分,你可以看看 对于第B部分,您可以

我目前正处于向Emacs转换的开始阶段。但是我有两个基本问题

  • 如何从特定路径递归搜索多个文件?我假设我必须使用
    find
    /
    grep
    /
    dired
    ,但我不确定。例如,我希望在路径
    C:/src/xxx
    中找到所有
    *.scala
    文件。找到这些文件后,我还希望立即在缓冲区中打开它们。我目前唯一熟悉的方法是C-xC-f

  • 当所有这些文件都在缓冲区中时,如何在所有缓冲区中搜索,并获得某种结果列表和/或可能能够在结果之间导航?我想找到所有带有
    case Int=>
    文本的地方


  • 对于A部分,你可以看看


    对于第B部分,您可以查看匹配缓冲区中的
    multi-occure
    ,您可以指定要使用哪些缓冲区(例如,要在所有scala文件中查找的所有缓冲区
    *.scala
    )以及要查找的内容(例如
    case Int=>
    )。这将为您提供所有事件的列表。

    我同意Phimueme的回答,但我也要指出
    M-x rgrep
    ,它将运行必要的find/grep,以便在不实际打开文件的情况下显示所有匹配项。选择匹配项,然后在该行号处打开相关文件。在某些情况下,这可能比打开所有这些文件更好

    另请参见以下内容:


      • 我认为你是在人为地限制答案。您不需要将所有文件加载到Emacs中来查找这些事件。并且,一旦您找到了regexp的引用,您就可以轻松地通过击键跳转到文件中的行

        我最喜欢的方法是使用M-x igrep find,因为我更喜欢
        igrep
        界面,而不是Emacs的
        grep find

        您可以在emacswiki上找到igrep库:

        而且用法是

        M-x igrep-find case Int => RET
        

        这将用所有匹配项填充缓冲区,然后(如在“发生”、“grep查找”、“编译”等)您可以使用C-x`或M-x next error循环遍历匹配项。

        您尝试在C:/src中的*.scala文件中查找所有出现的“case Int=>”

        最简单的方法(假设默认的Emacs设置)是使用
        M-x rgrep
        。它将要求您输入搜索字符串、文件类型和目录(按此顺序,并且提示已标记,因此不会出现混淆)。只需输入
        case Int=>
        *.scala
        C:/src/xxx

        您应该看到的是一个新的缓冲区,其中包含该目录中所有.scala文件中出现的“case Int=>”列表。如果单击某个引用,Emacs将打开该文件并导航到包含该文件的行

        请注意,如果您试图跨多个文件进行搜索和替换,可以使用
        dired
        选项进行搜索和替换。您可以找到关于该选项的信息。

        *关于问题A***

        冰柱中,默认情况下,C-x C-f是一个多命令。这意味着当您完成一组文件名时:

        • 您可以有选择地(例如C-RET、C-mouse-2)对多个候选对象采取行动(例如访问)

        • 您可以对名称与当前输入匹配的所有文件执行操作,例如,访问所有文件

        其他ICICILES文件命令也是如此,包括允许您匹配绝对文件名的命令,这意味着您的迷你缓冲区模式不仅可以匹配文件名的非目录部分,还可以匹配目录部分

        例如,前缀为arg的C-x C-f与绝对文件名匹配。而
        M-x冰柱定位文件
        对给定目录下的所有文件执行相同的操作

        (您始终可以将multi命令用作普通命令:如果您使用RET或mouse-2,C-x C-f将正常工作。如果您不使用额外的键绑定来处理多个文件,那么您永远不会知道其中的区别。)


        *对于问题B***

        您需要的是冰柱搜索

        • 命令
          冰柱搜索文件
          搜索指定集合的所有文件
        • 命令
          冰柱搜索缓冲区
          搜索指定集合的所有缓冲区
        • 命令
          冰柱搜索
          同时执行两项操作:带有负前缀arg的文件,带有非负前缀arg的缓冲区
        这些命令允许您指定一个regexp来定义搜索上下文:要搜索的文件或缓冲区的部分。例如,
        *
        意味着搜索每一行

        定义搜索上下文后,在迷你缓冲区中键入一些文本,它会将候选搜索上下文缩小为与文本匹配的文本。您可以点击M-SPC组合多个这样的模式

        然后,您可以导航到选定的搜索点击:C-RET或C-mouse-2访问,或使用C-down循环/访问。您甚至可以以各种方式对匹配的候选对象进行排序,以便轻松地进行比较或更改循环顺序

        参见,