命令在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。 recenterrecenter-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-horizo​​ntal-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上围绕光标水平居中屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

hmtl div水平垂直居中

css 实现DIV水平垂直居中于屏幕

有没有更好的方法将元素水平居中? [复制]

如何水平居中对齐标签以快速适应所有屏幕尺寸

Xamarin C#:试图水平居中按钮会导致它离开屏幕

SwiftUI当总内容宽度小于屏幕宽度时,如何在动态水平滚动视图中居中内容