命令在emacs上围绕光标水平居中屏幕?
Posted
技术标签:
【中文标题】命令在emacs上围绕光标水平居中屏幕?【英文标题】:Command to center screen horizontally around cursor on emacs? 【发布时间】:2010-11-17 23:34:03 【问题描述】:我熟悉并经常使用C-l
(recenter-top-bottom
) 来
将当前行移动到窗口中心, 依次是顶部和底部。
我想要一个等效的命令来将当前列依次移动到窗口中心、左右边框。内置或 Elisp 的 sn-p。
【问题讨论】:
C-h f recenter
(我的版本(GNU 22.3)没有recenter-top-bottom,你用的是什么版本?)说这个功能是在emacs的c-core中实现的,所以它在 elisp 中获得水平行为可能并非易事。考虑修补源?
我从 ubuntu emacs-snapshot 软件包版本 1:20090320-1ubuntu1 运行 GNU 23.0.91.1。 recenter
和 recenter-top-bottom
之间的唯一区别在于,在后者中,在将光标置于中心、顶部和底部之间重复命令循环。 C-x C-<
和 C-x C->
和普通的 C-f
已经存在水平滚动,当您靠近右边框时,所以我认为我们不必一直到 emacs 核心。
@obvio171 C-x C-<
和 C-x C->
在我的(几乎是裸露的)配置中未定义。你能具体说明你是从哪里得到它们的吗?
【参考方案1】:
给你:
(defun my-horizontal-recenter ()
"make the point horizontally centered in the window"
(interactive)
(let ((mid (/ (window-width) 2))
(line-len (save-excursion (end-of-line) (current-column)))
(cur (current-column)))
(if (< mid cur)
(set-window-hscroll (selected-window)
(- cur mid)))))
明显的绑定(来自obvio171)是:
(global-set-key (kbd "C-S-l") 'my-horizontal-recenter)
【讨论】:
这太完美了!将它绑定到 C-S-l,就像一个魅力!非常感谢! :) 不错!我已添加此功能以将您的功能集成到C-l
绑定中,前提是您处于截断行模式:(defun my-recenter () "在截断行模式下垂直和水平居中"(交互式)(如果(等于truncate-lines t) (my-horizontal-recenter)) (recenter-top-bottom)) (global-set-key "\Cl" 'my-recenter)
这只是重新居中。但是,连续按C-l
循环中心、顶部、底部。如果这个答案可以扩展到包括完整的循环,那就太好了。
这很漂亮。应该是 Emacs 的一部分。我建议使用名称recenter-left-right
。我也同意@ChristianHerenz。【参考方案2】:
如果您移动到选定的列并按 C-x C-n,则命令 C-n 和 C-p 将转到该列,直到您按 C-u C-x C-n 以关闭该行为。
一种穷人版本的你正在寻找的东西。
【讨论】:
这只会限制光标所在的列,但不会水平移动文本。我想要的是光标所在的列被“拖动”到屏幕的中心,进行水平滚动。以上是关于命令在emacs上围绕光标水平居中屏幕?的主要内容,如果未能解决你的问题,请参考以下文章