Emacs:帮助我理解文件/缓冲区管理
Posted
技术标签:
【中文标题】Emacs:帮助我理解文件/缓冲区管理【英文标题】:Emacs: help me understand file/buffer management 【发布时间】:2011-03-09 21:20:01 【问题描述】:在过去的三年里,我一直在使用 emacs 来满足我所有的文本编辑需求。当我在一个文件中,处理代码或诸如此类的东西时,我的效率相当高。有两个文件,我可以在它们之间“C-x b RET”,我做得很好。但是,每当我需要同时处理两个以上的文件时,我往往会迷路。
以下是我想要解决的一些问题:
我忘记了我的一些缓冲区被称为什么,但我不明白为什么 C-x C-b 将我的窗口分成两个缓冲区并退出迷你缓冲区。当然我可以切换缓冲区并选择要访问的缓冲区,但这感觉不直观,并且让我打开了两个缓冲区。
当我访问目录而不是文件时,我有一个所有文件和目录的方便列表。我通常想用这个做两件事之一:1)打开一个文件,再也看不到这个缓冲区,或者 2)打开一堆文件,再也看不到这个缓冲区。我真的不知道该怎么做,因为将点移动到文件并按回车键不会做这些事情。
我知道我的缓冲区不像选项卡,但我倾向于滚动它们以找到我想要的内容。我不知道任何键绑定,但我希望它是 M-n / M-p 或类似的。再说一次,这可能是一种非常低效的切换缓冲区的方法。
当我打开任何类型的交互式帮助(例如在 ESS 中)时,我习惯于切换回我正在工作的缓冲区并使用 C-x 1 回到单个缓冲区。但是,当我这样做时,帮助缓冲区会在我的缓冲区列表中徘徊,让我更加困惑。我知道我可以切换到那个缓冲区,杀死它,切换回来,然后再回到单个缓冲区,但这似乎是错误的。
到目前为止,我处理这个问题的方法是在不同的工作空间中使用平铺窗口管理器和几个 emacs 窗口,而不是真正学习在 emacs 中管理多个文件的最佳方法。我不一定要更改 emacs 以更好地满足我的需求(尽管如果它符合我要说的内容,我对此持开放态度),相反,我想了解处理文件背后的思考过程/缓冲 emacs 的方式,以及如何使用它来提高效率。
任何能帮助我理解正确方法或更有效的方法来管理我的缓冲区或文件的答案将不胜感激。
【问题讨论】:
2. xahlee.org/emacs/file_management.html看最后一个问题 我不知道如何在 dired 中标记文件。起初它似乎很有用,但后来我不知道如何一次打开所有标记的文件。有人知道怎么做吗? 这是默认能力的一个稍微奇怪的遗漏,那个。您可以使用C-o
在另一个窗口中打开当前行的文件,然后保留在dired窗口中,结合C-n
和C-p
上下移动可以打开多个文件继承非常快(尽管这确实掩埋了除了最近打开的缓冲区之外的所有缓冲区,这可能并不理想)。如需更好的答案,请看这里:***.com/questions/1110118/…
两个很棒的解决方案。谢谢。
【参考方案1】:
将C-x C-b
绑定到ibuffer
。这是一个更好的缓冲区列表工具,具有许多高级功能,它的默认行为是用缓冲区列表替换当前缓冲区,然后在您选择缓冲区时隐藏列表(让您使用新选择的缓冲区代替原来的)。
当然,您可以简单地使用C-x b
在迷你缓冲区中输入您的选择;但是,制表符补全(IMO 是使此选项成为可行选项所必需的)确实会暂时打开一个新窗口,此时我认为您不妨熟悉一些具有更多功能的东西。
从 dired 中选择时使用 a
而不是 RET
。这会杀死 dired 缓冲区而不是将其留在后面。任何缓冲区中的C-h m
都会向您显示其主要模式的帮助(随后是次要模式的帮助),您可以在那里阅读所有可用的 dired 键绑定。
http://www.emacswiki.org/cgi-bin/wiki/TabBarMode ? (编辑:我更喜欢 Rémi 对此的回答,但如果您特别热衷于 TabBarMode,它会为您提供可视标签元素。)
q
在许多主要模式中都绑定到“退出”功能。通常它会掩埋缓冲区而不是杀死它,但我当然觉得这很好。
详细说明 #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
:命名组定义并将其保存到您的初始化文件中。
/ r Web filters RET
:调用“Web 过滤器”过滤器。
/ R My groups RET
:调用“我的群组”群组。
RET
在组名上折叠或展开它。
C-k
和 C-y
杀死和拉扯小组,重新安排他们。
C-h m
了解更多信息...
这样您可以运行单个 Emacs 实例,并为不同类型的任务创建过滤器和组,并在它们之间轻松切换。
【讨论】:
重新阅读问题,我可能应该强调ibuffer的过滤和分组能力。我已经相应地更新了我的答案。 感谢您的回答!我不知道你可以使用 a in dired。不过,我对您对第四个问题的回答感到有些困惑。只是'q'?在 ESS 帮助缓冲区中,当我的窗口被拆分时,这要么将我移动到另一个缓冲区,要么拆分我的窗口。也许我做错了,但这似乎没什么用...... 对不起,我对 ESS 不熟悉。我以为您指的是使用 Emacs *Help* 缓冲区/模式的交互式帮助,其中 'q' 以这种方式绑定(实际上它在 dired、buffer-menu、ibuffer、bs -show,以及至少很大一部分(可能是大多数)将字母数字字符绑定到命令的内置主要模式。(如果 ESS 帮助符合此描述,也许您可以向他们提出改进建议?)在另一条评论中提到,C-x 4 0
运行 kill-buffer-and-window
,这是一个不错的通用解决方案。
谢谢,这完美地澄清了事情。【参考方案2】:
我想你会很喜欢Ido 处理多个你记不清名字的缓冲区。当您键入C-x b
时,它会按最常用的顺序显示打开缓冲区的列表。当您在缓冲区名称中键入一些字符时,列表将被过滤。您键入的字符不必在名字的开头或连续。使用C-f
、C-b
或左/右箭头键循环选择缓冲区。
另请参阅 Smex 以了解 M-x
的 Ido 类功能
使用C-x 0
关闭窗口。有意分割窗口是用C-x 2
表示水平,C-x 3
表示垂直。我喜欢这个功能,因为它让我可以同时看到测试和生产代码。 C-x o
带我到另一个窗口。
【讨论】:
当然还有C-x 1
,它会关闭框架中的所有其他窗口,最大化当前窗口。还有C-x 4 0
绑定到kill-buffer-and-window
,这可能是对原始问题之一的恰当解决方案。
虽然还有其他很好的答案,但我将其标记为已接受,因为 Ido 非常优雅地解决了我忘记缓冲区名称的最令人沮丧的问题。
我也刚刚意识到我可以使用 Ido 从 minibuffer 中杀死缓冲区。 C-b 然后选择我要杀死的那个和 C-k。太棒了。【参考方案3】:
我使用C-x right
(或C-x C-right
)和C-x left
(或C-x C-right
)转到下一个和上一个缓冲区。我不再介意 Emacs 中的少数缓冲区,但您可以在缓冲区列表中使用 k
来终止不再使用的缓冲区。
【讨论】:
对于这个的变体(以及默认的list-buffers
),还有bs。 bs-show
(或bs-show-sorted
)基本上是一个更简洁的列表缓冲区版本,没有像 ibuffer 这样的花哨功能。它还提供了bs-cycle-next
和bs-cycle-previous
,您可以使用它们以与Rémi 提到的命令相同的方式切换缓冲区。这些也指示了 minibuffer 中序列中接下来的几个缓冲区,这增加了一些额外的价值。检查“循环”功能的文档,因为您可以配置它将循环通过的 种类 缓冲区。
bs 不提供自己的键绑定,但如果您更喜欢它的功能而不是其他替代品,我只需将 C-x C-left
、C-x C-right
和 C-x C-b
重新绑定到bs 功能,根据需要。另请参阅M-x customize-group bs RET
。
这很棒。我敢肯定我可以用谷歌搜索这个,但由于某种原因,我被 M-n 和 M-p 赶上了。 C-x right 也同样有效。谢谢。【参考方案4】:
您也可以尝试Iswitchb mode,当您通过C-x b
切换缓冲区时,它会自动完成缓冲区名称。
激活:
M-x iswitchb-mode
或添加到您的 .emacs 文件中:
(iswitchb-mode)
它类似于Ido mode 用于缓冲区切换,但更轻量级。
此外,如果您想要更可自定义的缓冲区列表,请使用M-x bs-show
替代C-x C-b
。在该缓冲区中输入 ?
以获取您可以执行的操作列表。
【讨论】:
【参考方案5】:我认为对于翻阅缓冲区最有用的扩展是Anything。它可以让你开始输入缓冲区(或文件!)名称的一部分,它会找出你想要的。我已经将 C-x b 反弹到任何缓冲区。它让生活变得更好。
【讨论】:
我会看看这个。但我通常知道我的文件在我的计算机上的位置。只是不在 emacs 中。【参考方案6】:与往常一样,有许多方法可以帮助您解决此问题;这取决于个人喜好什么最有效,这里有一些解释链接:
ibuffer;这是一个更新的缓冲区菜单(C-x C-b) ido,让您拥有更强大的自动完成功能来切换缓冲区。这是一种“更好的 iswitchb”。这两个对我来说已经足够了;但您可能也对 tabbar-mode 感兴趣,它为您提供了基本的标签(就像 Firefox 一样)。
【讨论】:
感谢 emacs-fu 链接。以上是关于Emacs:帮助我理解文件/缓冲区管理的主要内容,如果未能解决你的问题,请参考以下文章