Emacs C-l命令仅重新居中屏幕,不';t循环通过顶部和底部重新定位

Emacs C-l命令仅重新居中屏幕,不';t循环通过顶部和底部重新定位,emacs,elisp,text-editor,Emacs,Elisp,Text Editor,在我的机器上反复运行emacs命令C-l,不会在这三个位置循环,只有第一个位置(屏幕中心) 从: C-l(重新居中上下) 滚动所选窗口,使当前行成为最中间的文本 线路;在随后的连续调用中,将当前行设置为 按循环顺序排列顶行、底行等。可能地 也重新显示屏幕(上下重新居中) 在一行中键入两次C-l(C-l C-l)会滚动窗口,使该点 位于屏幕最上面的一行。输入第三个C-l将滚动窗口 因此,该点位于最底部的屏幕线上。每个连续的C-l 在这三个位置循环 当我运行C-l时,它只会滚动窗口,使当前行位于最中

在我的机器上反复运行emacs命令
C-l
,不会在这三个位置循环,只有第一个位置(屏幕中心)

从:

C-l(重新居中上下)

滚动所选窗口,使当前行成为最中间的文本 线路;在随后的连续调用中,将当前行设置为 按循环顺序排列顶行、底行等。可能地 也重新显示屏幕(上下重新居中)

在一行中键入两次C-l(C-l C-l)会滚动窗口,使该点 位于屏幕最上面的一行。输入第三个C-l将滚动窗口 因此,该点位于最底部的屏幕线上。每个连续的C-l 在这三个位置循环

当我运行
C-l
时,它只会滚动窗口,使当前行位于最中间的文本行。但是在随后的调用中,该命令只是保持在同一点重新居中窗口。我在其他机器上使用过emacs,在这些机器上循环工作,第二次和第三次迭代确实会将窗口滚动到最上面和最下面的行,所以我知道我的版本有问题

我怎样才能解决这个问题


(请在注释中告诉我您需要查看哪些文件或信息才能诊断问题。)

在init.el文件中尝试此操作

(setq recenter-positions '(middle top bottom))

参考:

此功能是在Emacs 23.1中引入的。在早期版本中,
C-l
的行为与您描述的一样:它总是重新居中缓存,从不在顶部和底部之间循环

从Emacs 23手册的“Emacs 22 Antinews”部分:

对于那些生活在时间倒流中的用户,这里是关于降级到Emacs版本22.3的信息

C-l
现在运行的是recenter,而不是recenter top-bottom。这总是将当前行设置在窗口的中心,而不是在连续调用时循环通过窗口的中心、顶部和底部。这允许您键入
C-lc-lc-lc-lc-l
,以绝对确保您已重新居中该行


正如@legocia所提到的,我在23版中向Emacs添加了这个命令


但您可以通过加载库来获得原始版本,该版本适用于所有Emacs版本。如果您不想在那里定义其他命令,也可以从那里获取函数的代码。

您安装了哪些Emacs插件,如果有的话?@echristopherson安装了这个sass模式插件,但只是对它进行了rm'ed,因为我没有使用它。()您使用的是哪个Emacs版本?此功能在Emacs 23.1中引入;早期版本的行为和您描述的一样。Emacs 22已经有很多年了。如果您不打算升级(您可能应该升级),那么您应该警惕依赖这样的在线文档。Emacs是自我记录的,因此您可以通过使用内置的手册和帮助(这对每个人都非常有用,但在您的情况下更是如此)来确保获得适当的信息。我甚至在读完Legocia的答案之前就升级了。我将此放在我的
~/.Emacs
文件中,这是默认的init文件,这似乎没有改变任何事情。我做错什么了吗?你的.emacs文件加载正确吗?你能试试
M-x eval expression
然后
recenter positions
并告诉我你得到了什么吗?它返回
(中上下)
。然后,当我计算
(中上下)
时,我得到
调试器输入--Lisp错误:(void function middle)
确定。因此,您的
重新居中位置
值设置正确。然后可以使用
emacs--no init file
启动emacs,并键入以下命令:
M-x set variable
然后
recenter positions
,然后
(中上下)
。如果您的
C-l
没有围绕中间、顶部和底部光标位置旋转,则您的emacs不支持此功能(或者如果您在终端或ssh上使用此功能,您的
C-l
可能会被shell截获,但我怀疑它是否有效),然后,您安装的一个elisp软件包出现问题。@Markus:对我有用。您是否尝试过使用
Emacs-Q
(没有初始化文件)启动Emacs?如果它在这种情况下有效,那么将init文件对分以找到罪魁祸首。哎呀,在看到您的答复之前,我删除了我的评论,因为当我将密钥绑定到它并使用密钥绑定时,“recenter top-bottom”函数确实适用于我。但是如果没有键绑定,直接执行
M-x recenter top-bottom
对我不起作用,也就是说,它只居中,而不执行bottom或top命令。@Markus:循环依赖于上一个命令是同一个命令。