Emacs:帮助我理解文件/缓冲区管理

时间:2010-06-29 22:46:04

标签: emacs

我过去三年一直在使用emacs来满足我的所有文本编辑需求。当我在一个文件中,处理代码或诸如此类的东西时,我效率很高。有两个文件,我可以在它们之间“C-x b RET”,我做得很好。但是,每当我需要一次处理两个以上的文件时,我往往会迷路。

以下是我想要处理的一些问题:

  1. 我忘记了我的一些缓冲区被调用,但我不明白为什么C-x C-b将我的窗口分成两个缓冲区并退出迷你缓冲区。当然我可以切换缓冲区并选择一个缓冲区来访问,但这感觉不直观,让我打开两个缓冲区。

  2. 当我访问目录而不是文件时,我有一个方便的所有文件和目录列表。我通常想用以下两种方法之一做:1)打开一个文件,再也不会看到这个缓冲区或2)打开一堆文件,再也不会看到这个缓冲区。我真的不知道如何做到这一点,因为将点移动到文件并点击返回不会做这两件事。

  3. 我知道我的缓冲区不像标签,但我倾向于想要滚动它们以找到我想要的东西。我不知道有任何关键绑定,但我希望它是M-n / M-p等。然后,这可能是一种非常低效的切换缓冲区的方法。

  4. 当我打开任何类型的交互式帮助时(例如在ESS中),我习惯切换回我正在使用的缓冲区并使用C-x 1返回单个缓冲区。但是,当我这样做时,帮助缓冲区在我的缓冲区列表中挂起,这让我更加困惑。我知道我可以切换到那个缓冲区,杀死它,切换回来,然后回到单个缓冲区,但这似乎不对。

  5. 到目前为止,我处理这个问题的方法涉及在不同的工作空间中使用平铺窗口管理器和几个emacs窗口,而不是实际学习管理emacs中的大量文件的最佳方法。我不一定想改变emacs以更好地满足我的需求(尽管如果它符合我要说的话,我会对此持开放态度),相反,我想要理解处理文件背后的思考过程/缓冲emacs的工作方式,以及如何提高它的效率。

    任何能够帮助我理解正确方法的答案,或者更有效的方式来管理我的缓冲区或文件都将非常感激。

6 个答案:

答案 0 :(得分:19)

  1. C-x C-b绑定到ibuffer。这是一个具有许多高级功能的更好的缓冲区列表工具,其默认行为是用缓冲区列表替换当前缓冲区,然后在选择缓冲区时隐藏列表(让您使用新选择的缓冲区代替原创的)。

    可以简单地使用C-x b在迷你缓冲区中输入您的选择;然而,tab-completion(这是使其成为一个可行的选项,IMO所需)会暂时打开一个新窗口,此时我认为你可以熟悉一些具有更多功能的东西。

  2. 从dired中选择时,请使用a代替RET。这会杀死dired缓冲区而不是将其抛在脑后。任何缓冲区中的C-h m都会向您显示其主要模式的帮助(其次是辅助模式的帮助),您可以阅读那里所有可用的dired键绑定。

  3. http://www.emacswiki.org/cgi-bin/wiki/TabBarMode? (编辑:我更喜欢Rémi的答案,但是如果你特别热衷于TabBarMode会给你视觉标签元素。)

  4. q在许多主要模式中都被绑定到“退出”功能。通常它会掩盖缓冲区而不是杀死它,但我当然觉得很好。

  5. 为了详细说明#1,ibuffer有很多不错的功能,M-x customize-group ibuffer RET会让你知道如何根据自己的喜好自定义它。

    此外,您可以按多个条件过滤缓冲区列表(再次使用C-h m查看其帮助页面),然后从当前过滤器生成“组”定义,并保存自定义过滤器和组供将来使用。

    例如:

    • / f ^/var/www/ RET:过滤缓冲区列表,仅显示以/var/www/开头的文件名。
    • / s Web filters RET:将活动过滤器名称并保存到初始文件中。
    • / g Web development RET:从活动过滤器中创建一个命名组。
    • / S My groups RET:将组定义命名并保存到init文件中。
    • / r Web filters RET:调用“网络过滤器”过滤器。
    • / R My groups RET:调用“我的群组”。
    • RET关于群组名称以折叠或展开它。
    • C-kC-y杀死并组织团队,重新安排他们。
    • C-h m了解更多信息......

    通过这种方式,您可以运行单个Emacs实例,并为不同类型的任务创建过滤器和组,并可以轻松地在它们之间切换。

答案 1 :(得分:17)

我认为你真的很喜欢Ido来处理你不能完全记住名字的多个缓冲区。键入C-x b时,它会显示最常用顺序的打开缓冲区列表。当您在缓冲区名称中键入一些字符时,列表将被过滤。您键入的字符不必是名称的乞讨或连续。使用C-fC-b或左/右箭头键可循环选择缓冲区。

另请参阅Smex了解Ido类似于M-x

的功能

关闭窗口是使用C-x 0完成的。有意拆分窗口的方法是C-x 2表示水平,C-x 3表示垂直方向。我喜欢这个功能,因为它允许我同时显示测试和生产代码。 C-x o带我到另一个窗口。

答案 2 :(得分:4)

我使用C-x right(或C-x C-right)和C-x left(或C-x C-right)转到下一个和上一个缓冲区。我不介意在Emacs中存在的几个缓冲区,但你可以在缓冲区列表中使用k来杀死你不再使用的缓冲区。

答案 3 :(得分:4)

当您通过C-x b切换缓冲区时,您还可以尝试Iswitchb mode为缓冲区名称提供自动完成功能。

激活:

M-x iswitchb-mode

或者添加到.emacs文件中:

(iswitchb-mode)

缓冲区切换类似于Ido mode,但更轻巧。

此外,如果您想要更加可自定义的缓冲区列表,请使用M-x bs-show替代C-x C-b。在该缓冲区类型?中获取您可以执行的操作列表。

答案 4 :(得分:2)

我认为翻转缓冲区的最有用的扩展名是Anything。它允许您开始键入缓冲区(或文件!)名称的一部分,它将找出您想要的内容。我将C-x b反弹到任何缓冲区。它让生活变得更好。

答案 5 :(得分:2)

与往常一样,有许多方法可以帮助您解决此问题;它取决于个人喜好什么效果最好,这里有一些解释的链接:

  • ibuffer;这是一个更新的缓冲区菜单(C-x C-b)
  • ido,让你有更强大的自动完成功能来切换缓冲区。这是一种“更好的iswitchb”。

这两个对我来说足够了;但是你也可能对tabbar-mode感兴趣,这会为你提供基本的标签(比如firefox有它们)。