Emacs - 通过键入扩展名然后输入文件名切换到缓冲区

时间:2011-11-21 07:15:46

标签: emacs

是否有可能在emacs中以一种方式搜索文件名,我首先在空格中输入空格,然后输入文件名本身?例如。 org notes org 将切换到notes.org。

或者有没有办法编写这样的函数来做到这一点?

6 个答案:

答案 0 :(得分:11)

如果你使用ido,你可以输入org c-space notes。

Ido需要一段时间才能习惯,但就个人而言,如果没有它,我就无法生存。

答案 1 :(得分:3)

Anything可以轻松完成此操作,运行任何内容,在缓冲区名称中输入任何单词,结果显示:

Emacs Anything

按照此安装:http://emacs-fu.blogspot.com/2011/09/finding-just-about-anything.html

如果你想过滤缓冲区,这里有一个示例配置:

(require 'anything-config)
(global-set-key (kbd "C-x b")
            (lambda() (interactive)
              (anything
               :prompt "Switch to: "
               :sources
               '(anything-c-source-buffers))))

答案 2 :(得分:1)

我完全赞同安德斯,IDO非常有用。例如,如果你有两个缓冲区“some-video-page.js”和“video.py”,你可以输入“C-x b vidjs”或“C-x b vidpy”来切换到其中任何一个。

(ido-mode)
(setq ido-enable-flex-matching t)

还要考虑使用ibuffer来组织缓冲区。您可以按完整文件名过滤缓冲区,并根据当前过滤器关闭多个缓冲区。

(global-set-key (kbd "C-x C-b") 'ibuffer)

回到你的问题。现在有uniquify库随Emacs一起提供,默认情况下它将包含缓冲区名称中父目录的名称。但这是我们正在谈论的emacs,您可以根据需要自定义它。我有一个自定义文件挂钩,只有python模块名称前缀python缓冲区。 IDO对您来说是否足够,或者您仍然希望自定义切换缓冲区功能吗?

答案 3 :(得分:1)

Icicles开箱即用 - 只需使用 S-TAB 代替 TAB 即可完成 - 即apropos completion比前缀完成。

要完成多种模式(例如子字符串)而不考虑其顺序,请使用progressive completion。使用 S-SPC 分隔模式。

    C-x C-f notes S-SPC org

    C-x C-f org S-SPC notes

或者,为了确保org与文件扩展名匹配,请使用\.org。 (或者使用 C -` 来切换子串/正则表达式匹配,即转义正则表达式特殊字符。)

如果使用缓冲区名称完成(或任何其他类型的完成)而不是文件名完成,则相同。

对于Ido的“flex”匹配, Icicles 具有相同的功能(称为“分散”匹配),以及其他几种类型的fuzzy matching。 (但是所有形式的模糊匹配都没有它们听起来那么有用,恕我直言。)

答案 4 :(得分:1)

默认情况下,您可以使用名称通配来执行此操作。

C-x b *.org TAB

Emacs会自动将点移动到星号后面,这样您就可以立即继续输入部分缓冲区名称。

同样*org*.org更容易输入,并且可能会为您的目的获得足够相似的结果。

答案 5 :(得分:1)

与Emacs一起提供的

Iswitchb并没有做到这一点,而是关闭。它显示了迷你缓冲区中的缓冲区名称列表。在您键入时,列表会缩小到名称中包含您键入的文本的缓冲区(在任何地方,而不仅仅是在开头)。因此,如果您键入.org,那么您将进入名称中包含.org的缓冲区。要在这些文件中打开特定文件,您需要将光标向左移动并键入文件名的最后一个字母,或者按C-rC-s在匹配项之间轮换。< / p>

Emacs wiki有一个page on Iswitchb和一个comparison of Icicles, Ido and Iswitchb