【问题标题】:Emacs 25 and list-buffers behaviorEmacs 25 和列表缓冲区行为
【发布时间】:2015-07-01 14:35:49
【问题描述】:

谁能帮我理解列表缓冲区(又名 Ctrlx - Ctrlb)的行为在 emacs 25 中?

behavior I'm used to seeing 是它在另一个 Emacs 窗口(虚拟 Emacs 窗口)中打开缓冲区列表,并在必要时拆分出第二个窗口来执行此操作。在某些版本中,它使用哪个其他窗口并不总是非常确定(如果我有超过 2 个),但我至少可以指望它不使用光标所在的那个。

我最近安装了 25.0.50.1 来解决远程文件打开错误(有效!),但现在它并不总是这样做。很多时候,它会在我的光标所在的同一个窗口中打开缓冲区列表。它通常以以前的方式工作。我想不出它选择这样做的任何韵律或原因。

有人可以告诉我它现在使用的算法吗?当我无法预测哪个窗口会被替换时,它几乎不可能管理多个 emacs 窗口以供参考查看。

【问题讨论】:

  • 得到答案后,如果您觉得文档或行为不清楚或您更喜欢什么,请考虑提交错误/增强请求:M-x report-emacs-bug
  • 如果您有兴趣通过创建自己的函数使其按照您想要的方式工作,有几个线程 [可通过谷歌搜索获得] 讨论如何使其显示左/右/上/下.然而,大多数人似乎更喜欢建议或显示缓冲区列表来解决现有函数的默认行为,而不是简单地创建新函数——这些方法可能也有一些线程,但我没有检查.
  • @lawlist - 在我决定更改默认行为之前,我想确切地知道当前的默认行为是什么。
  • 问题实际上是关于确定函数display-buffer 的默认行为。我建议您阅读该函数的文档字符串,可以通过键入:M-x describe-function RET display-buffer RET 来查看。函数 list-buffers 是一 (1) 行代码,不包括 doc-string 和交互式语句 - 即 (display-buffer (list-buffers-noselect arg))。 Noselect 是不言自明的——即,生成一个包含你习惯看到的成分的缓冲区,然后它就坐在那里等待显示——例如,display-buffer
  • display-bufferdisplay-buffer-alist 的文档,以及他们试图描述和解释的行为,确实“远远超出了我的 [原文如此] 凡人感知(和理解)。FWIW,我和你在一起 - 我也从来无法理解。

标签: emacs emacs25


【解决方案1】:

我猜你主要关心的是有一个方便的方法来切换缓冲区,而不是理解 emacs 的源代码,所以我强烈建议检查helm package out: http://tuhdo.github.io/helm-intro.html 安装并按照教程操作大约需要 10 到 20 分钟,非常值得。我保证。

安装helm并启用后,你的按键顺序是Ctrl-x bShows open buffers, recently opened files

您将获得在 emacs 中工作的许多其他工具的强大功能。我在切换缓冲区和看似“混乱”的缓冲区弹出窗口时遇到了同样的问题。在helm 安装后,问题被最小化到不可见,因为它很容易切换到你想要的缓冲区。

更新

处理包安装错误和包兼容性: M-x list-load-path-shadows 看看是否有任何冲突的包。而且由于你可能没有很多外部包,我建议备份~/.emacs.d 并有一个新的空包。此外,在安装包的大多数情况下,我尝试使用 emacs 包管理器。使用包管理器的好处:

  • 帮助检查依赖关系
  • 避免手动下载和解压。
  • 可以批量更新已安装的包

以下是启用melpa repo 和安装包的工作流程

M-x customize-group RET package
# Click or move cursor to and enter: Package Archives
# Insert the melpa repository. 
Archive name: melpa
URL or directory name: http://stable.melpa.org/packages/
#Save above settings and then you can use the following to install packages:
M-x list-packages RET
f to filer package names
i to mark for installation
x for execution of installation
u for unmark package at cursor. 

# to avoid using load-path repeatedly,
# I have this in my .emacs before any 'require' command:
; Set path recursively to one folder
(let ((default-directory "~/.emacs.d/elpa/"))(normal-top-level-add-subdirs-to-load-path))

【讨论】:

  • 感谢您的提示。我会检查一下。除了特定的短期需求外,我通常不喜欢在我的 emacs 中添加外部包。 Emacs 有一个讨厌的习惯,就是从它们下面进化出来,然后我最终完成了一项令人愉快的任务,就是在我忘记为什么多年后,我必须修改/删除哪些神秘的 .emacs 条目才能让事情再次运行他们在那里,他们在做什么。不过也有例外。
  • 为了解决这个问题,我实际上对我的.emacs 文件进行了很多评论,在我所做的每一次修改中。但是,有时您最喜欢的键序列可能会被重新定义,或者包会被隐藏。这些键序列可能非常有用:C-h m:列出加载模式。 C-h k:解释了键序列。 M-x list-load-path-shadows:找出冲突的路径。甚至可以简单地使用C-s 来搜索.emacs 中的重复键序列。
  • 我去看了。就我而言,这有点像用锤子打苍蝇。不过,我确实喜欢它在 Windows 上使用的 Everything 搜索的外观。所以我尝试安装它。没有骰子。当我尝试在我的 .emacs 中要求它时出现错误。网络搜索告诉我这可能是由于重用了另一个包正在使用的名称,但“一切”在 .el 文件中并不是一个不常见的词,所以我不知道它在点击量的海洋中是什么。我之前有没有提到为什么我不喜欢在我的 emacs 中添加外部包?
  • 这就是我所说的“电源组”。我已经更新了帖子以帮助解决安装和包冲突。此外,Emacs 25 仍处于 beta 阶段,因此应该预料到不稳定性。因此,重新设置是个好主意。
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多